在我当前的实现中,每个 db 表都有单独的实体类。我正在使用 JPA 和 eclipselink-2.5.2。这对我来说很好,但在某些时候数据很大时,它会滞后。这就是我决定开始使用@Embedded、@Embeddable 和@EmbeddedId 的原因。这样做时,我遇到了一个对我来说很奇怪的错误。这是发布的完整堆栈跟踪:https ://gist.githubusercontent.com/tjDudhatra/b955812e0d1a71cf97f1/raw/11ea458869e24baae744530417ac99bc877ed514/gistfile1.txt
具体来说,让我给你一个确切的场景,在这种情况下我得到了例外。考虑这个具有三个类的代码块。一个被注释为@Entity,其他两个被注释为@Embeddable。我知道在一个类中我们不能定义 @Id 和 @EmbeddedId 并且我没有这样做,然后在部署服务器时,我得到一个异常,它只说:
[class org.apache.{SomeClass}] 有一个@EmbdeddedId(在属性[id] 上)和一个@Id(在属性[] 上)。不能在同一个实体上指定这两种ID 类型。
@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;
....
}
如果需要更多详细信息,请告诉我,任何帮助将不胜感激。
谢谢,