我有一个hibernate映射问题。我有以下两个数据库表(不允许更改数据库):
LOCATIONS {
ID, -- PK
NAME
}
LOCATION_GROUPS {
LOC_ID, -- PK, and FK to LOCATIONS.ID
GROUP_NAME -- PK
}
我试图为这些数据库表创建实体,但是我不知道如何映射表之间的连接。这是我的尝试(但这是错误的):
@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;
}
// ...
}
困难在于我想在列和一部分嵌入式Id列之间建立一个OneToMany连接。对这个问题有想法吗?(我正在使用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 = -6437671620548733621L;
private Long locationId;
private String group;
@Column(name = "LOC_ID")
public Long getLocationId() {
return loc;
}
@Column(name = "GROUP_NAME")
public String getGroup() {
return group;
}
// ...
}
@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中运行代码时,我得到: 引起原因:org.hibernate.PropertyAccessException:无法通过com.test.entities.EmployeeId.serverId的反射设置器设置字段值 但是,让我们从头开始…我有一个实体的复合主键,它由指向其他两个实体(和)的外键组成。为了设计简洁,我在Employee实体中使用
问题内容: 我有一个hibernate映射,该映射一直工作到最近-尽管我确定这是我所做的某些更改的结果,但我似乎找不到它。 映射文件将字段定义为: 该类将该字段定义为: 运行此代码时,出现以下错误: 与此对应的数据库字段定义为: 我还有其他几个具有相似结构和定义的类,并且它们没有问题。但是,可能由于我最近所做的一些更改而导致,此特定映射将不再正常工作。 有什么建议么? 问题答案: 我不确定,但是您
问题内容: 我收到了一个我无法解释的奇怪的Hibernate异常。告诉我我正在使用二级缓存,但是没有在哪里指定二级缓存。这是例外: 而我的: 有什么想法会触发此异常吗?提前致谢! 问题答案: Pau在hibernate.cfg.xml中写了hibernate.cache.region.factory_class: 唯一的例外是不言而喻的。您必须设置 属性。例如,使用ehcache将添加以下行: n
问题内容: 有人可以透视一下JPA和Hibernate之间的区别吗?还是将这些互补的概念一起使用? 问题答案: 大致来说,JPA是java社区的一个标准,这里是specs,它是由Hibernate家伙实现(并扩展)的(此处提供一些信息)。作为规范,您将不会直接使用JPA,而是使用JPA实现。 请注意,如果要使用hibernateJPA扩展,将破坏与其他JPA实现的兼容性(尽管有些人会说“为什么要使
我有一个hibernate映射问题。我有以下两个DB表(不允许我更改DB): 我试图为这些DB表创建实体,但不知道如何映射表之间的连接。以下是我的尝试(但它是错误的): 可嵌入类 嵌入使用 困难在于我想在一个列和embeddedId列的一部分之间建立一个单一的连接。对这个问题有什么想法吗?(我正在使用Hibernate4.0.1)
问题内容: 我有一个Spring和Hibernate3在生产中运行良好的应用程序。以下是Spring的applicationContext.xml中会话工厂的配置 生产正常。 现在,对于另一个项目,我们正在迁移到Hibernate4。我们使用org.springframework.orm.hibernate4。*包中的Hibernate 4的SessionFactory,TransacionMan