这个例子中以:公民与身份证号是一对一的关系
public class TabPeople { private int id; private String name; private int sex; private int age; private IDCard idCard; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public IDCard getIdCard() { return idCard; } public void setIdCard(IDCard idCard) { this.idCard = idCard; } }
<hibernate-mapping> <!-- 每一个class类对应一个持久化对象 --> <class name="model.TabPeople" table="mw_peo"> <id name="id" column="id" type="int"> <!-- 主键的生成策略 --> <generator class="native"/> </id> <property name="name"></property> <property name="age"></property> <property name="sex"></property> <one-to-one name="idCard" class="model.IDCard" cascade="all"></one-to-one> </class> </hibernate-mapping>
public class IDCard { private int id; private int cardCode; private TabPeople people; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getCardCode() { return cardCode; } public void setCardCode(int cardCode) { this.cardCode = cardCode; } public TabPeople getPeople() { return people; } public void setPeople(TabPeople people) { this.people = people; } }
<hibernate-mapping> <!-- 每一个class类对应一个持久化对象 --> <class name="model.IDCard" table="mw_card"> <id name="id" column="id" type="int"> <!-- 主键的生成策略 --> <generator class="foreign"> <param name="property">people</param> </generator> </id> <property name="cardCode"></property> <one-to-one name="people" class="model.TabPeople" constrained="true"/> </class> </hibernate-mapping>
public static void main(String[] args) { Configuration configuration=new Configuration().configure(); SessionFactory sessionFactory=configuration.buildSessionFactory(); Session session=sessionFactory.openSession(); Transaction transaction=session.beginTransaction(); TabPeople people = new TabPeople(); people.setAge(18); people.setName("zhansan"); people.setSex(1); IDCard card=new IDCard(); card.setCardCode(7238498); people.setIdCard(card); card.setPeople(people); session.save(people); transaction.commit(); session.close(); }
注意测试类中一定要写card.setPeople(people),因为IDCard中的主键是根据people中的主键来获取,如果去掉这句代码,会出现以下错误:
Exception in thread "main" org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property [model.IDCard.people] at org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:101) at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:120) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:615) at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:608) at org.hibernate.engine.spi.CascadingAction$5.cascade(CascadingAction.java:258) at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165) at org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:462) at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:337) at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:195) at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:128) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204) at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189) at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:642) at org.hibernate.internal.SessionImpl.save(SessionImpl.java:635) at org.hibernate.internal.SessionImpl.save(SessionImpl.java:631) at test.TestApplication8.main(TestApplication8.java:36)
相关推荐
Hibernate一对一主键映射实例,里面包含源程序,测试程序,映射说明
NULL 博文链接:https://lijunabc.iteye.com/blog/438426
hibernate主键一对一关联映射代码示例
博文链接:https://llying.iteye.com/blog/220803
博文链接:https://llying.iteye.com/blog/220802
关于hiberante主键的一对一的映射,单向的,实例
博文链接:https://shaqiang32.iteye.com/blog/201309
http://blog.csdn.net/e421083458/article/details/8794127 该源码为Hibernate教程配套源码
博文链接:https://shaqiang32.iteye.com/blog/201308
NULL 博文链接:https://12345678.iteye.com/blog/723871
│ ├─ 一对一主键单向关联 │ ├─ 一对一连接表单向关联 │ ├─ 一对多外键单向关联 │ ├─ 一对多连接表单向关联 │ ├─ 多对一外键单向关联 │ ├─ 多对一连接表单向关联 │ └─ 多对多单向关联 └─双向...
http://blog.csdn.net/e421083458/article/details/8794127 该源码为Hibernate教程配套源码
这个是针对初学Hibernate一对多主键关联映射的源代码 ,希望对初学者有所帮助,开发环境是MyEclipse7.5和HIbernate3.2
009 一对一 主键关联映射_单向 010 一对一 主键关联映射_双向 011 一对一 唯一外键关联映射_单向 012 一对一 唯一外键关联映射_双向 013 session_flush 014 一对多关联映射 单向 015 一对多关联映射 双向 016 多对多...
Hibernate 一对一主键单向关联 Hibernate 一对一连接表单向关联 Hibernate 一对多外键单向关联 Hibernate 一对多连接表单向关联 Hibernate 多对一外键单向关联 Hibernate 多对一连接表单向关联 Hibernate 多对多单向...