Hibernate@EmbeddedId+;参加
我有一个hibernate映射问题。我有以下两个DB表(不允许我更改DB): 我试图为这些DB表创建实体,但不知道如何映射表之间的连接。以下是我的尝试(但它是错误的): 可嵌入类Hibernate@EmbeddedId+;参加,hibernate,mapping,one-to-many,Hibernate,Mapping,One To Many,我有一个hibernate映射问题。我有以下两个DB表(不允许我更改DB): 我试图为这些DB表创建实体,但不知道如何映射表之间的连接。以下是我的尝试(但它是错误的): 可嵌入类 @Embeddable public class LocationGroupId implements Serializable { private static final long serialVersionUID = -6437671620548733621L;
@Embeddable
public class LocationGroupId implements Serializable {
private static final long serialVersionUID = -6437671620548733621L;
private Location loc;
private String group;
@Column(name = "LOC_ID")
public Location getLoc() {
return loc;
}
@Column(name = "GROUP_NAME")
public String getGroup() {
return group;
}
// ...
}
使用的嵌入式ID
@Entity
@Table(name = "LOCATION_GROUPS")
public class LocationGroup {
private LocationGroupId id;
@EmbeddedId
public LocationGroupId getId() {
return id;
}
// ...
}
@Entity
@Table(name = "LOCATION_GROUPS")
public class LocationGroup {
private LocationGroupId id;
private Location location;
@EmbeddedId
public LocationGroupId getId() {
return id;
}
@ManyToOne
@JoinColumn(name = "LOC_ID")
@MapsId("locationId")
private Location getLocation() {
return location;
}
// ...
}
@实体
@表(name=“位置”)
公共类位置{
私人长id;
私有字符串名称;
私人名单组;
@列(name=“name”)
公共字符串getName(){
返回此.name;
}
@OneToMany(mappedBy=“id.loc”)
公共列表getGroups(){
返回此项。分组;
}
@身份证
@列(name=“ID”)
@SequenceGenerator(name=“LocationIdGen”,sequenceName=“LOCATION\u SQ”)
@GeneratedValue(策略=GenerationType.AUTO,generator=“LocationIdGen”)
公共长getId(){
返回此.id;
}
// ...
}
困难在于我想在一个列和embeddedId列的一部分之间建立一个单一的连接。
对这个问题有什么想法吗?(我使用的是hibernate 4.0.1)必须使用
@JoinColumn
映射位置,而不能使用@Column
:
@JoinColumn(name = "LOC_ID")
public Location getLoc() {
return loc;
}
注意,这不是标准的JPA。要使其标准化,您可以使用
可嵌入类
@Embeddable
public class LocationGroupId implements Serializable {
private static final long serialVersionUID = -6437671620548733621 L;
private Long locationId;
private String group;
@Column(name = "LOC_ID")
public Long getLocationId() {
return loc;
}
@Column(name = "GROUP_NAME")
public String getGroup() {
return group;
}
// ...
}
使用的嵌入式ID
@Entity
@Table(name = "LOCATION_GROUPS")
public class LocationGroup {
private LocationGroupId id;
@EmbeddedId
public LocationGroupId getId() {
return id;
}
// ...
}
@Entity
@Table(name = "LOCATION_GROUPS")
public class LocationGroup {
private LocationGroupId id;
private Location location;
@EmbeddedId
public LocationGroupId getId() {
return id;
}
@ManyToOne
@JoinColumn(name = "LOC_ID")
@MapsId("locationId")
private Location getLocation() {
return location;
}
// ...
}
这两个映射在中进行了解释。JB Nizet,谢谢您的回答。在我读你的答案之前,我找到了那一页:并使用了它。但我感谢你的回答,并接受它作为解决方案:)