java – HIbernate一对一注释不依赖表中生成外键GerericGenerator
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – HIbernate一对一注释不依赖表中生成外键GerericGenerator,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2200字,纯文字阅读大概需要4分钟。
内容图文
![java – HIbernate一对一注释不依赖表中生成外键GerericGenerator](/upload/InfoBanner/zyjiaocheng/779/e3f377ad4fd94738b7b23c9fe651811a.jpg)
我试图在Person和Auth表之间创建OneToOne关系.问题是当生成DB表“Auth”时,我没有在AUTH表中看到应该引用Person的外键.对象是让Auth表使用Person Table的相同主键.
@MappedSuperclass
public abstract class DomainBase {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@Version
@Column(name="OPLOCK")
private Integer version;
}
@Entity
@Table(name = "person")
public class Person extends DomainBase {
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="auth_id")
private Auth auth;
}
@Entity
public class Auth {
@Id
@GeneratedValue(generator="foreign")
@GenericGenerator(name="foreign", strategy = "foreign", parameters={
@Parameter(name="property", value="person")
})
@Column(name="person_id")
private int personId;
---------------------------------
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private Person person;
}
hibernate数据库生成后的我的数据库脚本.
CREATE TABLE auth
(
person_id integer NOT NULL,
activate boolean,
activationid character varying(255),
last_login_attempt_date timestamp without time zone,
last_login_attempt_timezone character varying(255),
last_login_date timestamp without time zone,
last_login_timezone character varying(255),
nonlocked boolean,
num_login_attempts integer,
CONSTRAINT auth_pkey PRIMARY KEY (person_id),
CONSTRAINT uk_d68auh3xsosyrjw3vmwseawvt UNIQUE (activationid)
)
WITH (
OIDS=FALSE
);
ALTER TABLE auth
OWNER TO postgres;
解决方法:
似乎问题是你在“person”表和“auth”表之间声明两次@OneToOne注释,而没有指定它们之间的关系.看一下hibernate documentation,在2.2.5.1点,有一些关于使用一对一关联的例子.
对我来说,最好的方法是在一个表中设置关联,一个声明foreing键列,另一个在另一个对象中使用mappedBy参数.在您的代码中,这将是:
@Entity
@Table(name = "person")
public class Person extends DomainBase {
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="auth_id")
private Auth auth;
}
@Entity
public class Auth {
@Id
@GeneratedValue(generator="foreign")
@GenericGenerator(name="foreign", strategy = "foreign", parameters={
@Parameter(name="property", value="person")
})
@Column(name="person_id")
private int personId;
@OneToOne(mappedBy = "auth")
private Person person;
....
}
这是hibernate文档中的第二个示例,在句子“在下面的示例中,关联实体通过显式外键列链接”之后引入.我测试了这段代码,出现了“auth_id”列.
内容总结
以上是互联网集市为您收集整理的java – HIbernate一对一注释不依赖表中生成外键GerericGenerator全部内容,希望文章能够帮你解决java – HIbernate一对一注释不依赖表中生成外键GerericGenerator所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。