一对一主键单向引用
User 和car的一对一,car id主键引用user id作为外键。card实体可以访问user实体,但是反之不行(单向)。
publicclassCardimplements Serializable {
privateIntegerid;
privateStringinfo;
private Useruser;
publicclassUserimplements Serializable {
privateIntegerid;
privateStringname;
privateIntegerage;
<class name="org.hibernate.tutorial.domain.Card" table="card">
<idname="id"type="java.lang.Integer"column="id">
<generatorclass="foreign">
<paramname="property">user</param>
</generator>
</id>
<propertyname="info"type="java.lang.String"column="info"length="255"/>
<!-- Associations -->
<one-to-onename="user"class="org.hibernate.tutorial.domain.User"/>
</class>
User.hbm.xml中将one-to-one配置注释掉。
Useruser=newUser();
user.setName("Lucy24");
user.setAge(19);
Cardcard=newCard();
card.setInfo("card");
card.setUser(user);
session.save(card);
大概是因为关联关系由card维护,插入card实体的时候,hibernate知道对应的user是哪一个,而新的user实体插入的时候id是自增长而且无外键约束所以可以自动生成并成功插入。之前的一对一配置card插入时需要知道id,并且外键约束userid,而一对一关系由user维护,所以无法插入card。以上解释都是自我猜测。
一对一主键双向关联,在user和card中都配置对方实例,这样就不会有(一)中的card找不到对应的user实例的问题。