我有一个hibernate映射问题。我有以下两个DB表(不允许我更改DB):
LOCATIONS {
ID, -- PK
NAME
}
LOCATION_GROUPS {
LOC_ID, -- PK, and FK to LOCATIONS.ID
GROUP_NAME -- PK
}
我试图为这些DB表创建实体,但不知道如何映射表之间的连接。以下是我的尝试(但它是错误的):
可嵌入类
@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;
}
// ...
}
嵌入使用
@Entity
@Table(name = "LOCATION_GROUPS")
public class LocationGroup {
private LocationGroupId id;
@EmbeddedId
public LocationGroupId getId() {
return id;
}
// ...
}
@Entity
@Table(name = "LOCATIONS")
public class Location {
private Long id;
private String name;
private List<LocationGroup> groups;
@Column(name = "NAME")
public String getName() {
return this.name;
}
@OneToMany(mappedBy = "id.loc")
public List<LocationGroup> getGroups() {
return this.groups;
}
@Id
@Column(name = "ID")
@SequenceGenerator(name = "LocationIdGen", sequenceName = "LOCATION_SQ")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "LocationIdGen")
public Long getId() {
return this.id;
}
// ...
}
困难在于我想在一个列和embeddedId列的一部分之间建立一个单一的连接。对这个问题有什么想法吗?(我正在使用Hibernate4.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;
private Location location;
@EmbeddedId
public LocationGroupId getId() {
return id;
}
@ManyToOne
@JoinColumn(name = "LOC_ID")
@MapsId("locationId")
private Location getLocation() {
return location;
}
// ...
}
文档中解释了这两个映射。
问题内容: 我有一个hibernate映射问题。我有以下两个数据库表(不允许更改数据库): 我试图为这些数据库表创建实体,但是我不知道如何映射表之间的连接。这是我的尝试(但这是错误的): 困难在于我想在列和一部分嵌入式Id列之间建立一个OneToMany连接。对这个问题有想法吗?(我正在使用hibernate4.0.1) 问题答案: 必须使用而不是使用来映射位置: 请注意,虽然这不是标准的JPA。
问题内容: 我有一个复合主键的表,其中指的是实体 HolidayPackage 有 许多 到 一个 关系 HolidayPackageVariant 和 HolidayPackage 。 当我尝试在HolidayPackageVariant中进行复杂的PK映射时,出现以下错误: 初始SessionFactory创建失败。org.hibernate.annotations.common.Assert
问题内容: 我有一个简单的Entitly类,(和单独类中的字段)。然后,我使用Spring Data()访问数据库(MySql),使用常规ID,查询可以正常工作,无论是Spring生成的查询还是我自己编写的查询。与我没有设法创建正确的查询。我想做的是选择所有id(发生某些情况的EmbeddedId字段之一),这里有一些代码示例,也许有人会知道如何解决它。 实体类: EmbeddedId类: 和存储
问题内容: 我有一个具有以下结构的MySQL数据库(节选): 另外,还有一个USER表,但这并不重要,有了这些表,您可以了解问题的全貌。 如您所见,某些列具有将在类中变为的属性。 并且由于它们与其他表的关系而具有复合主键,因此我无法更改。由于为Composite ,因此映射的类必须具有一个带有相应类的。 问题是我需要在组合的 “本机” 部分中添加一个,例如:必须具有JPA @GeneratedVa
问题内容: 我在注释和上遇到了问题。在Hibernate中运行代码时,我得到: 引起原因:org.hibernate.PropertyAccessException:无法通过com.test.entities.EmployeeId.serverId的反射设置器设置字段值 但是,让我们从头开始…我有一个实体的复合主键,它由指向其他两个实体(和)的外键组成。为了设计简洁,我在Employee实体中使用