我的表的复合键是userid,orderno,orderstatus。
实体类是
@Entity
public class OrTest implements java.io.Serializable {
private UserInfo user; //UserInfo is embedded class having userid
private OrderInfo order; // OrderInfo is embedded class having order
private Status status; //Status is embedded class having orderstatus
//Contains other misc info
}
如何在此场景中使用embeddedid,其中我的实际复合键字段分布在多个嵌入类中。
答案 0 :(得分:0)
您可以让EmbeddedId类包含所有3个键。如下所示
public class OrTextPk implements Serializable{
@Column(name="userId")
public String userId;
@Column(name="orderNo")
public String orderNo'
@Column(name="orderStatus")
public String orderStatus;
}
现在,在OrText类中,您可以执行以下操作。
@Entity
public class OrTest implements java.io.Serializable {
@EmbeddedId
private OrTextPk id;
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="userId")
private UserInfo user; //UserInfo is embedded class having userid
.
.
.
so on...
}
答案 1 :(得分:0)
除了@Zeus发布的解决方案之外,您只需要按照以下方式进行较小的更改即可。
复合PK
public class OrTextPk implements Serializable{
public String userId;
@Column(name="orderNo")
public String orderNo'
@Column(name="orderStatus")
public String orderStatus;
}
主要实体类
@Entity
public class OrTest implements java.io.Serializable {
@EmbeddedId
private OrTextPk id;
@OneToOne(fetch = FetchType.LAZY)
// Note: it will help to map value of userId (UserInfo) to Pk object
@MapsId("userId")
@JoinColumn(name = "userId")
private UserInfo user; //UserInfo is embedded class having userid
.
.
.
so on...
}
现在,在设置UserInfo
(用户)的新建/持久对象时,userId
对象的UserInfo
的值将分配给userId
的{{1}}同时保留OrTextPk
对象。