在我当前的实现中,每个数据库表都有单独的实体类。我正在将JPA与eclipselink-2.5.2一起使用。这对我来说很好,但是在某些情况下,当数据量巨大时,它就会滞后。这就是为什么我决定开始使用@ Embedded,@ Embeddable和@EmbeddedId的原因。在执行此操作时,我遇到一个错误,这对我来说很奇怪。这是发布的完整堆栈跟踪:https://gist.githubusercontent.com/tjDudhatra/b955812e0d1a71cf97f1/raw/11ea458869e24baae744530417ac99bc877ed514/gistfile1.txt

具体来说,让我给您确切的情况,在这种情况下我会遇到异常(exception)。考虑具有三个类别的此代码块。一个注解为@Entity,另两个注解为@Embeddable。
我知道在一个类中我们无法定义@Id和@EmbeddedId,而我还没有做到这一点,所以在部署服务器时,我也得到了一个异常(exception),该异常(exception)仅表示:


@Entity
@Table(name="user")
public class User {

  @ID
  public Long id;

  @Column(name="userCode")
  public String userCode;

  @ElementCollection
  @CollectionTable(name = "address", joinColumns = @JoinColumn(name = "user_id"))
  public List<Address> addressList;

  ....
}

@Embeddable
public class Address {

  @EmbeddedId
  @Column(name = "id")
  public Long id;

  @Column(name="userId")
  public Long userId;

  @Column(name="address-line-1")
  public String addressLine1;

  @Column(name="address-line-2")
  public String addressLine2;

  @ElementCollection
  @CollectionTable(name = "phone", joinColumns = @JoinColumn(name = "user_id"))
  protected List<Phone> phoneList;

  ....
}

@Embeddable
public class Phone {

  @EmbeddedId
  @Column(name = "id")
  public Long id;

  @Column(name="contact_no")
  public String contactNo;

  @Column(name="country_code")
  public int countryCode;

  @Column(name="address_id")
  public int addressId;

  ....
}

请让我知道是否需要更多详细信息以及任何帮助,我们将不胜感激。

谢谢,

最佳答案

带注释的@Embeddable的类不得包含任何@EmbeddedId
@EmbeddedId用于在另一个类中注释@Embeddable类类型的字段,并将其标记为主键。

例子 :

@Entity
public class Project {
    @EmbeddedId ProjectId id;
    ...
}

@Embeddable
Class ProjectId {
    int departmentId;
    long projectId;
    ...
}

编辑:就您而言,我认为您不希望Phone,也不希望Address成为@Embeddable。只需将它们标记为常规@Entity即可。

09-10 12:50