在此代码中,如何为组合键生成Java类(如何在hibernate状态下组合键):
create table Time (
levelStation int(15) not null,
src varchar(100) not null,
dst varchar(100) not null,
distance int(15) not null,
price int(15) not null,
confPathID int(15) not null,
constraint ConfPath_fk foreign key(confPathID) references ConfPath(confPathID),
primary key (levelStation, confPathID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
要映射组合键,你可以使用EmbeddedId 或在IdClass注解。我知道这个问题不仅仅涉及JPA,但规范定义的规则也适用。因此,它们是:
2.1.4主键和实体身份
…
组合主键必须对应于单个持久性字段或属性,或对应于如下所述的一组此类字段或属性。必须定义一个主键类来表示一个复合主键。当数据库密钥由几列组成时,从传统数据库进行映射时,通常会出现复合主键。的EmbeddedId和 IdClass注解用于表示复合主键。参见9.1.14和9.1.15节。
…
以下规则适用于复合主键:
serializable
。equals
和hashCode
方法。这些方法的值相等的语义必须与键映射到的数据库类型的数据库相等一致。With an IdClass
复合主键的类可能看起来像(可以是静态内部类):
public class TimePK implements Serializable {
protected Integer levelStation;
protected Integer confPathID;
public TimePK() {}
public TimePK(Integer levelStation, Integer confPathID) {
this.levelStation = levelStation;
this.confPathID = confPathID;
}
// equals, hashCode
}
And the entity:
@Entity
@IdClass(TimePK.class)
class Time implements Serializable {
@Id
private Integer levelStation;
@Id
private Integer confPathID;
private String src;
private String dst;
private Integer distance;
private Integer price;
// getters, setters
}
该IdClass注释映射多个字段的表PK。
With EmbeddedId
复合主键的类可能看起来像(可以是静态内部类):
@Embeddable
public class TimePK implements Serializable {
protected Integer levelStation;
protected Integer confPathID;
public TimePK() {}
public TimePK(Integer levelStation, Integer confPathID) {
this.levelStation = levelStation;
this.confPathID = confPathID;
}
// equals, hashCode
}
和实体:
@Entity
class Time implements Serializable {
@EmbeddedId
private TimePK timePK;
private String src;
private String dst;
private Integer distance;
private Integer price;
//...
}
该@EmbeddedId
注解映射一个PK类表PK。
差异:
with IdClass
select t.levelStation from Time t
with EmbeddedId
select t.timePK.levelStation from Time t
问题内容: 在此代码中,如何为组合键生成Java类(如何在休眠状态下组合键): 问题答案: 要映射组合键,你可以使用 或在注解。我知道这个问题不仅仅涉及,但规范定义的规则也适用。因此,它们是: 2.1.4主键和实体身份 … 组合主键必须对应于单个持久性字段或属性,或者对应于如下所述的一组此类字段或属性。必须定义一个主键类来表示一个复合主键。当数据库密钥由几列组成时,从传统数据库进行映射时,通常会出
问题内容: 您能帮我使用Hibernate映射此类吗? 我正在使用PostgreSQL,表中的列类型是integer []应该如何映射我的数组? 问题答案: 我从未将数组映射为hibernate状态。我总是使用收藏集。因此,我对您的课程进行了一些更改:
问题内容: 有没有人通过Hibernate成功将PostgreSQL中的数字数组映射到Java中的数字数组? sql: 映射: 类: 查询表时出现异常。 问题答案: Hibernate不支持开箱即用的数据库阵列(例如,映射到的数据库阵列)。 Hibernate提供的类型和类型用于将Java数组映射到支持表- 它们基本上是一对多/元素集合映射的变体,所以这不是您想要的。 最新的PostgreSQL的
问题内容: 使用Hibernate,可以创建一个组合ID,其中要映射到该ID的列之一可以为空值吗? 这是为了处理具有唯一键的旧表,该键可以具有空值,但不能具有主键。 我意识到我可以只向表中添加一个新的主键列,但是我想知道是否有任何方法可以避免这样做。 问题答案: 否。主键不能为null。
问题内容: 我有一个颜色枚举 我有包含它的MyEntity。 我已经有一个UserType来映射我的枚举。 您知道如何在Hibernate hbm.xml中映射枚举集吗? 我需要UserType还是最简单的方法? 谢谢 编辑: 只是为了说明一下,我正在寻找 hbm.xml 配置而不是@CollectionOfElements注释 问题答案: 我使用EnumSet映射线程中的解决方案,该解决方案依赖
当使用 Declarative 样式是在许多类之间共享一些功能,例如一组公共列、一些公共表选项或其他映射属性。标准的Python习惯用法是让类继承自一个包含这些常见特性的超类。 当使用声明性映射时,通过使用mixin类,以及通过增加 registry.generate_base() 方法或 declarative_base() 功能。 下面是一些常见的混合成语的例子: from sqlalchem