关于hibernate 映射映射关系的问题!!

定义一个人的域对象:
public class Person {
private IdCard idC
定义一个该人的身份证的域对象:
public class IdCard {
Person.hbm.xml配置文件:
&hibernate-mapping package="com.aaasoft.domain"&
&class name="Person" table="person"&
&id name="id" column="id"&
&generator class="sequence"&
&param name="sequence"&PERSON_SEQUENCE&/param&
&/generator&
&property name="name" column="name"/&
&one-to-one name="idCard"&&/one-to-one&
&/hibernate-mapping&
IdCard.hbm.xml配置文件:
&hibernate-mapping package="com.aaasoft.domain"&
&class name="IdCard" table="idcard"&
&id name="id" column="id"&
&generator class="foreign"&
&param name="property"&person&/param&
&/generator&
&property name="usefuldate" column="usefuldate" /&
&one-to-one name="person"&&/one-to-one&
&/hibernate-mapping&
工具类里的保存方法:
public static void save(Object entity) {
Session session =
Transaction tx =
session = HibernateUtil.getSession();
tx = session.beginTransaction();
session.save(entity);
tx.commit();
} finally {
if (session != null)
session.close();
测试方法:
public static void main(String[] args) {
Person p = new Person();
p.setName("idcard test");
IdCard idCard = new IdCard();
p.setIdCard(idCard);
idCard.setUsefuldate(new Date());
idCard.setPerson(p);
PersonDao persondao = new PersonDaoImpl();
persondao.savePerson(p);
IdCardDao idcarddao = new IdCardDaoImpl();
idcarddao.addIdCard(idCard);
异常信息:
Hibernate: select PERSON_SEQUENCE.nextval from dual
Hibernate: insert into person (name, id) values (?, ?)
Hibernate: insert into idcard (usefuldate, id) values (?, ?)
Exception in thread "main" org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.mit(JDBCTransaction.java:106)
at com.atwasoft.utils.HibernateUtil.save(HibernateUtil.java:37)
at com.atwasoft.dao.impl.IdCardDaoImpl.addIdCard(IdCardDaoImpl.java:10)
at com.atwasoft.test.Test.main(Test.java:30)
Caused by: java.sql.BatchUpdateException: ORA-02291: 违反完整约束条件 (TEST.IDCARD_FK) - 未找到父项关键字
at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:342)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10656)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
数据库里的idcard表的ID既做主键,又做外键(参考Person的主键ID),怎么还是报找不到父项关键字呢
采纳的答案
参考实例详解
/topic/450705
/topic/450837
&&&&&&&&&&& &generator class="sequence"&&&
&&&&&&&&&&&&&&&& &param name="sequence"&PERSON_SEQUENCE&/param&&
&&&&&&&&&&& &/generator&&&
你把这里面的&param name="sequence"&PERSON_SEQUENCE&/param&改写下试试
我一般都是写成这样的 &id name="id" column="id" type="integer"&&&&&&&&&& &generator class="identity"/&&&&&&&& &/id&
hibernate配置文件的时候是跟数据库一一对应的应该把你数据库中所有的字段都写到property里面
..
我也是初学
不过 貌似你的标签有点问题
&one-to-one name="idCard"&&/one-to-one&&&
这里为什么只配置一个name
配置关联关系属性的时候 要有四部分组成
name -- 关系属性的名称
class -- 关系属性所对应的类 hibernate同类来锁定表
cascade -- 级联
还有一个是外键
在 one-to-one 标签中 默认的就是共享主外键 外键就不用配置了
正确的应该是这样的&
&one-to-one name="idCard" class="IdCard" cascade="all"&&/one-to-one&&
&one-to-one name="person" class="Person" cascade="all"&&/one-to-one&&&
还有你的dao部分
public static void save(Object entity) {&&
&&& Session session =&&
&&& Transaction tx =&&
&&& try {&&
&&&&&&& /*
&&&&&&&& *在这里你直接是getSession();
&&&&&&&& *我不请求你的util是怎么写的不过看你下面又把session给close了
&&&&&&&&& * 那么你应该是调用的OpenSession()方法了
&&&&&&&&& * 为什么不用SessionFactory的getCurrentSession方法呢?
&&&&&&&&& * 建议你在HibernateUtil种提供一个getCurrentSession()的方法
&&&&&&&&& *&& 这是hibernate提供的线程安全的方法 建议你看一下ThreadLocal
&&&&&&&& * 还有如果使用了CurrentSession 需要在hibernate的配置文件中加上
&&&&&&&&& * 如下标签
&&&&&&&&& * &property
&&&&&&&& * name="current_session_context_class"&thread&/property&
&&&&&&&& */
&&&&&&& session = HibernateUtil.getCurrentSession();
&&&&&&& tx = session.beginTransaction();&&
&&&&&&& session.save(entity);&&
&&&&&&& tx.commit();&&
&&& } catch(RuntimeException e){
&&&&&&& e.
&&&&&&& if(tx!=null){
&&&&&&&&&& tx.rollback();
&&&&&&& }
&&& }&&
小弟是第一次回答问题 不求给分
回答的有不对的地方 请高手指出 不吝赐教
已解决问题
未解决问题一个数据库表映射成多个Hibernate的实体的有关问题_数据库大全_优良自学吧 |
当前位置: >
> 一个数据库表映射成多个Hibernate的实体的有关问题优良自学吧提供一个数据库表映射成多个Hibernate的实体的有关问题,一个数据库表映射成多个Hibernate的实体的问题 在最近一个项目中,由于项目管理的不善,导致了开发人员之间的相对独立的开发,所以就造成了本来是同一个数据库的表,但是映射成了两个Java类,本来相安无事,但是因为需求变动,造成此表要增加很多字段,本着节省工作的思想,于是在其中一个实体类中一个数据库表映射成多个Hibernate的实体的问题
在最近一个项目中,由于项目管理的不善,导致了开发人员之间的相对独立的开发,所以就造成了本来是同一个数据库的表,但是映射成了两个Java类,本来相安无事,但是因为需求变动,造成此表要增加很多字段,本着节省工作的思想,于是在其中一个实体类中增加了成员变量,而由另外一个实体类继承之,由此引出了一下问题:
数据库表为test
两个实体类分别为testDomain1和testDomain2,其中testDomain2 extends testDomain1
在业务代码中,使用QBC查询testDomain1时的count时,是这么写的:
criteria.setProjection(Projections.rowCount()).uniqueResult();
在执行时抛出了异常:
org.hibernate.NonUniqueResultException: query did not return a unique result: 2
at org.hibernate.impl.AbstractQueryImpl.uniqueElement(AbstractQueryImpl.java:758)
at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:431)
at com.ibm.b2e.framework.base.dao.BaseDaoImpl.pagedQuery(BaseDaoImpl.java:784)
at com.ibm.b2e.framework.base.dao.BaseDaoImpl.pagedQuery(BaseDaoImpl.java:651)
而看Hibernate打印出的SQL执行了两次select count(*)的操作,于是猜到是表被映射了两次的问题,想从网上查一下解决方法,但是不知道选择什么关键词,只好自己看源代码,
发现在uniqueResult()这个方法中调用的是SessionImpl的list(CriteriaImpl criteria)方法
而list()这个方法中调用了sessionFactory的getImplementors( String className )方法,这个方法返回的是一个字符串数组,调试发现,它的值正好是我两个实体类的全类名,后面的代码则是根据这两个类名来执行查询,
焦点就在sessionFactory的getImplementors( String className )中了,马上冲进去一看,发现其中有一个遍历所有已映射对象的循环操作:
while ( iter.hasNext() ) {
//test this entity to see if we must query it
EntityPersister testPersister = (EntityPersister) iter.next();
if ( testPersister instanceof Queryable ) {
Queryable testQueryable = (Queryable) testP
String testClassName = testQueryable.getEntityName();
boolean isMappedClass = className.equals(testClassName);
if ( testQueryable.isExplicitPolymorphism() ) {
if (isMappedClass) return new String[] { className }; //NOTE EARLY EXIT
if (isMappedClass) {
results.add(testClassName);
final Class mappedClass = testQueryable.getMappedClass( EntityMode.POJO );
if ( mappedClass!=null && clazz.isAssignableFrom( mappedClass ) ) {
final boolean assignableS
if ( testQueryable.isInherited() ) {
Class mappedSuperclass = getEntityPersister( testQueryable.getMappedSuperclass() ).getMappedClass( EntityMode.POJO);
assignableSuperclass = clazz.isAssignableFrom(mappedSuperclass);
assignableSuperclass =
if (!assignableSuperclass) results.add(testClassName);
看代码的意思,首先是判断当前循环到的class是不是本次查询所查的class,其次再判断Mapped class的一个属性值:testQueryable.isExplicitPolymorphism() 如果此值为true的话,直接就返回一个值只有className的字符串数组;而如果isExplicitPolymorphism()方法返回的值是false的话,那么下面的代码将会继续检查当前循环到的类是否是QBC的类的子类,如果是,则加在字符串数组中一起返回,我所遇到的问题正是后者。
看来关键出在isExplicitPolymorphism() 的值上面。
查询了Hibernate的sessionFactory初始化代码后,发现此方法的返回值来自于Mapping配置文件,打开Mapping配置文件用代码提示看了一下,&class&元素果然有一个名为polymorphism的属性,此属性有两个候选值:explicit,implicit,在研究此值的实际作用时,发现了JavaEye上原来早已经有一篇文章QBC 解惑,里面很详尽的介绍了此方法,
而对于这样的设计梦秋雨童鞋的解释更是一针见血,非常形象,不得不在此处引用一下:
梦秋雨写道
这个事情不用去看实现,仅从对象层面上理解我觉得也能够得出同样的结论。hibernate的管理下应用似乎得到了一个大的对象池,你去查Person,好比和这个对象池的管理员说“把所有的人都叫出来”。当然会返回池中所有的Person,如果不是,那么,你还当学生是人么? 类比,查询Object类的对象,好比说“芸芸众生啊,都来举个手”,结果可想而知。
强人啊强人。。强人啊强人。。。(此处重复30遍)(本文来自互联网,不代表搜站(/)的观点和立场)编辑推荐最近更新hibernate映射关系是一对一还是多对一??简单问题我问了三次了....
[问题点数:40分,结帖人lylshr]
hibernate映射关系是一对一还是多对一??简单问题我问了三次了....
[问题点数:40分,结帖人lylshr]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
本帖子已过去太久远了,不再提供回复功能。hibernate-关联关系映射配置 - java_andy - 博客园
随笔 - 235, 文章 - 0, 评论 - 14, 引用 - 0
Hibernate关联关系映射配置 2
一、 一对一单向外键关联: 2
1.1目录结构 2
1.2&Annotation方式 2
1.3&XML方式 4
1.4&Hibernate配置文件 7
二、一对一双向外键关联 7
2.1&Annotation方式 7
2.2&XML方式 9
三、一对一单向主键关联(不重要) 12
3.1&Annotation方式 12
3.2&XML方式 14
四、一对一双向主键关联(不重要) 16
4.1&Annotation方式 16
3.2&XML方式 19
五、组件映射 21
5.1&Annotation方式 21
5.2&XML方式 23
六、多对一单向关联 25
6.1&Annotation方式 25
6.2&XML方式 27
七、一对多单向关联 29
7.1&Annotation方式 29
7.2&XML方式 31
八、一对多、多对一双向关联 34
8.1&Annotation方式 34
8.2&XML方式 36
九、多对多单向关联 39
8.1&Annotation方式 39
8.2&XML方式 41
十、多对多双向关联 44
8.1&Annotation方式 44
8.2&XML方式 46
Hibernate关联关系映射配置
一、&一对一单向外键关联:
1.1目录结构
图1-1&目录结构图
1.2&Annotation方式
1.2.1&类图
图1-2&类关联关系图
1.2.2数据库表结构
图1-3数据库表结构图
1.2.3&实体类
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&javax.persistence.C
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.OneToO
import&javax.persistence.SequenceG
@Entity(name="H_HUSBAND_")
@SequenceGenerator(name="husband_seq_gene",&sequenceName="HUSBAND_SEQ",&allocationSize=1)
public&class&Husband&{
private&BigDecimal&
private&String&
private&Wife&
@Column(precision=4,&scale=0)
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="husband_seq_gene")
public&BigDecimal&getId()&{
@Column(length=30)
public&String&getName()&{
//@JoinColumn(name="wife_id")//不写也没问题,自动生成的字段也叫wife_id
public&Wife&getWife()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&void&setName(String&name)&{
this.name&=&
public&void&setWife(Wife&wife)&{
this.wife&=&
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&javax.persistence.C
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.SequenceG
@Entity(name="H_WIFE_")
@SequenceGenerator(name="wife_seq_gene",&sequenceName="WIFE_SEQ")
public&class&Wife&{
private&BigDecimal&
private&String&
@Column(precision=4)
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="wife_seq_gene")
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
@Column(length=30)
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
1.3&XML方式
1.3.1&类图
图1-4&类关联关系图
1.3.2&数据库表结构
图1-5数据库表结构图
1.3.3&实体类
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
public&class&XML_Husband&{
private&BigDecimal&
private&String&
private&XML_Wife&
public&BigDecimal&getId()&{
public&String&getName()&{
public&XML_Wife&getWife()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&void&setName(String&name)&{
this.name&=&
public&void&setWife(XML_Wife&wife)&{
this.wife&=&
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
public&class&XML_Wife&{
private&BigDecimal&
private&String&
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
1.3.4&对象关系映射文件
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_Husband"&table="H_HUSBAND_XML"&dynamic-update="true"&
&id&name="id"&type="big_decimal"&
&column&name="id"&precision="4"&scale="0"&/&
&generator&class="sequence"&
&param&name="sequence"&H_STUDENT_SEQ_XML&/param&
&/generator&
&property&name="name"&length="30"&&/property&
&many-to-one&name="wife"&column="wife_id"&unique="true"&not-null="true"&/&
&!--many-to-one是站在当前类XML_Husband的角度来看,XML_Husband与wife是多对一--&
&&&&&/class&
&/hibernate-mapping&
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_Wife"&table="H_Wife_XML"&dynamic-update="true"&
&id&name="id"&
&column&name="id"&precision="4"&scale="0"&/&
&generator&class="sequence"&
&param&name="sequence"&H_STUDENT_SEQ_XML&/param&
&/generator&
&property&name="name"&length="30"&/&
&&&&&/class&
&/hibernate-mapping&
1.4&Hibernate配置文件
&?xml&version='1.0'&encoding='utf-8'?&
&!DOCTYPE&hibernate-configuration&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Configuration&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&
&hibernate-configuration&
&session-factory&
&property&name="connection.driver_class"&oracle.jdbc.driver.OracleDriver&/property&
&property&name="connection.url"&jdbc:oracle:thin:@127.0.0.1:1521:silence&/property&
&property&name="connection.username"&cnuser&/property&
&property&name="connection.password"&cn830306&/property&
&property&name="connection.pool_size"&1&/property&
&property&name="current_session_context_class"&thread&/property&
&property&name="cache.provider_class"&org.hibernate.cache.NoCacheProvider&/property&
&property&name="show_sql"&true&/property&
&property&name="format_sql"&true&/property&
&property&name="dialect"&org.hibernate.dialect.Oracle9Dialect&/property&
&!--&property&name="hbm2ddl.auto"&update&/property&--&
&mapping&class="com.rongqq.hibernate3.annotation.entity.Husband"&/&
&mapping&class="com.rongqq.hibernate3.annotation.entity.Wife"&/&
&mapping&resource="com/rongqq/hibernate3/xml/entity/XML_Husband.hbm.xml"&/&
&mapping&resource="com/rongqq/hibernate3/xml/entity/XML_Wife.hbm.xml"&/&
&/session-factory&
&/hibernate-configuration&
二、一对一双向外键关联
2.1&Annotation方式
2.1.1&类图
图2-1类关联关系图
2.1.2&数据库结构图
图2-2数据库表结构图
2.1.3&实体类
@Entity(name="H_HUSBAND_")
@SequenceGenerator(name="husband_seq_gene",&sequenceName="HUSBAND_SEQ",&allocationSize=1)
public&class&Husband&{
private&BigDecimal&
private&String&
private&Wife&
@Column(precision=4,&scale=0)
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="husband_seq_gene")
public&BigDecimal&getId()&{
@Column(length=30)
public&String&getName()&{
//@JoinColumn(name="wife_id")//不写也没问题,自动生成的字段也叫wife_id
public&Wife&getWife()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&void&setName(String&name)&{
this.name&=&
public&void&setWife(Wife&wife)&{
this.wife&=&
@Entity(name="H_WIFE_")
@SequenceGenerator(name="wife_seq_gene",&sequenceName="WIFE_SEQ")
public&class&Wife&{
private&BigDecimal&
private&String&
private&Husband&
@Column(precision=4)
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="wife_seq_gene")
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
@Column(length=30)
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
@OneToOne(mappedBy="wife")
public&Husband&getHusband()&{
public&void&setHusband(Husband&husband)&{
this.husband&=&
2.2&XML方式
2.2.1&类图
图2-3&类关联关系图
2.2.2&数据库结构图
2.2.3&实体类
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
public&class&XML_Husband&{
private&BigDecimal&
private&String&
private&XML_Wife&
public&BigDecimal&getId()&{
public&String&getName()&{
public&XML_Wife&getWife()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&void&setName(String&name)&{
this.name&=&
public&void&setWife(XML_Wife&wife)&{
this.wife&=&
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
public&class&XML_Wife&{
private&BigDecimal&
private&String&
private&XML_Husband&
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
public&XML_Husband&getHusband()&{
public&void&setHusband(XML_Husband&husband)&{
this.husband&=&
2.2.4&对象关系映射文件
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_Husband"&table="H_HUSBAND_XML"&dynamic-update="true"&
&id&name="id"&type="big_decimal"&
&column&name="id"&precision="4"&scale="0"&/&
&generator&class="sequence"&
&param&name="sequence"&H_STUDENT_SEQ_XML&/param&
&/generator&
&property&name="name"&length="30"&&/property&
&many-to-one&name="wife"&unique="true"&not-null="true"&&
&column&name="wife_id"&precision="4"&&/column&
&/many-to-one&
&&&&&/class&
&/hibernate-mapping&
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_Wife"&table="H_Wife_XML"&dynamic-update="true"&
&id&name="id"&
&column&name="id"&precision="4"&scale="0"&/&
&generator&class="sequence"&
&param&name="sequence"&H_STUDENT_SEQ_XML&/param&
&/generator&
&property&name="name"&length="30"&/&
&!--&这里的wife是XML_Husband类中的属性名,表示这里的关联关系已经由Husband的对象
映射文件的wife属性上定义过了&--&
&one-to-one&name="husband"&property-ref="wife"&/&
&&&&&/class&
&/hibernate-mapping&
三、一对一单向主键关联(不重要)
3.1&Annotation方式
3.1.1&类图
图3-1&类关联关系图
3.1.2&数据库表结构
图3-2&数据库表结构图
3.1.3&实体类
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&javax.persistence.C
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.OneToO
import&javax.persistence.PrimaryKeyJoinC
import&javax.persistence.SequenceG
@Entity(name="H_HUSBAND_")
@SequenceGenerator(name="husband_seq_gene",&sequenceName="HUSBAND_SEQ",&allocationSize=1)
public&class&Husband&{
private&BigDecimal&
private&String&
private&Wife&
@Column(precision=4,&scale=0)
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="husband_seq_gene")
public&BigDecimal&getId()&{
@Column(length=30)
public&String&getName()&{
@PrimaryKeyJoinColumn
public&Wife&getWife()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&void&setName(String&name)&{
this.name&=&
public&void&setWife(Wife&wife)&{
this.wife&=&
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&javax.persistence.C
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.SequenceG
@Entity(name="H_WIFE_")
@SequenceGenerator(name="wife_seq_gene",&sequenceName="WIFE_SEQ")
public&class&Wife&{
private&BigDecimal&
private&String&
@Column(precision=4)
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="wife_seq_gene")
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
@Column(length=30)
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
注:只生成了表,但是没有外键约束,具体实现还需要查找
3.2&XML方式
3.2.1&类图
图3-3&类关联关系图
3.2.2&数据库表结构
图3-4&数据库表结构图
3.2.3&实体类
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
public&class&XML_Husband&{
private&BigDecimal&
private&String&
private&XML_Wife&
public&BigDecimal&getId()&{
public&String&getName()&{
public&XML_Wife&getWife()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&void&setName(String&name)&{
this.name&=&
public&void&setWife(XML_Wife&wife)&{
this.wife&=&
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
import&com.rongqq.hibernate3.annotation.entity.H
public&class&XML_Wife&{
private&BigDecimal&
private&String&
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
3.2.4&对象映射文件
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_Husband"&table="H_HUSBAND_XML"&dynamic-update="true"&
&id&name="id"&type="big_decimal"&
&column&name="id"&precision="4"&scale="0"&/&
&generator&class="foreign"&
&!--&&指明具体参考哪一个外键,因为一张表可能存在多个外键&--&
&param&name="property"&wife&/param&
&/generator&
&property&name="name"&length="30"&&/property&
&one-to-one&name="wife"&constrained="true"&&/one-to-one&
&&&&&/class&
&/hibernate-mapping&
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_Wife"&table="H_Wife_XML"&dynamic-update="true"&
&id&name="id"&
&column&name="id"&precision="4"&scale="0"&/&
&generator&class="sequence"&
&param&name="sequence"&H_STUDENT_SEQ_XML&/param&
&/generator&
&property&name="name"&length="30"&/&
&&&&&/class&
&/hibernate-mapping&
四、一对一双向主键关联(不重要)
4.1&Annotation方式
4.1.1&类图
图4-1&类关联关系图
4.1.2&数据库表结构
图4-2&数据库表结构图
4.1.3&实体类
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&javax.persistence.C
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.OneToO
import&javax.persistence.PrimaryKeyJoinC
import&javax.persistence.SequenceG
@Entity(name="H_HUSBAND_")
@SequenceGenerator(name="husband_seq_gene",&sequenceName="HUSBAND_SEQ",&allocationSize=1)
public&class&Husband&{
private&BigDecimal&
private&String&
private&Wife&
@Column(precision=4,&scale=0)
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="husband_seq_gene")
public&BigDecimal&getId()&{
@Column(length=30)
public&String&getName()&{
@PrimaryKeyJoinColumn
public&Wife&getWife()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&void&setName(String&name)&{
this.name&=&
public&void&setWife(Wife&wife)&{
this.wife&=&
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&javax.persistence.C
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.OneToO
import&javax.persistence.PrimaryKeyJoinC
import&javax.persistence.SequenceG
@Entity(name="H_WIFE_")
@SequenceGenerator(name="wife_seq_gene",&sequenceName="WIFE_SEQ")
public&class&Wife&{
private&BigDecimal&
private&String&
private&Husband&
@Column(precision=4)
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="wife_seq_gene")
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
@Column(length=30)
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
@PrimaryKeyJoinColumn
public&Husband&getHusband()&{
public&void&setHusband(Husband&husband)&{
this.husband&=&
注:同样不产生关联关系,具体实现待查
3.2&XML方式
4.2.1&类图
图4-3&类关联关系图
4.2.2&数据库表结构
图4-4&数据库表结构图
4.2.3&实体类
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
public&class&XML_Husband&{
private&BigDecimal&
private&String&
private&XML_Wife&
public&BigDecimal&getId()&{
public&String&getName()&{
public&XML_Wife&getWife()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&void&setName(String&name)&{
this.name&=&
public&void&setWife(XML_Wife&wife)&{
this.wife&=&
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
public&class&XML_Wife&{
private&BigDecimal&
private&String&
private&XML_Husband&
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
public&XML_Husband&getHusband()&{
public&void&setHusband(XML_Husband&husband)&{
this.husband&=&
4.2.4&对象映射文件
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_Husband"&table="H_HUSBAND_XML"&dynamic-update="true"&
&id&name="id"&type="big_decimal"&
&column&name="id"&precision="4"&scale="0"&/&
&generator&class="foreign"&
&param&name="property"&wife&/param&
&/generator&
&property&name="name"&length="30"&&/property&
&one-to-one&name="wife"&constrained="true"&&/one-to-one&
&&&&&/class&
&/hibernate-mapping&
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_Wife"&table="H_Wife_XML"&dynamic-update="true"&
&id&name="id"&
&column&name="id"&precision="4"&scale="0"&/&
&generator&class="sequence"&
&param&name="sequence"&H_STUDENT_SEQ_XML&/param&
&/generator&
&property&name="name"&length="30"&/&
&one-to-one&name="husband"&property-ref="wife"&&/one-to-one&
&&&&&/class&
&/hibernate-mapping&
五、组件映射
5.1&Annotation方式
5.1.1&类图
图5-1&类关联关系图
5.1.2&数据库表结构
图5-2&数据库表结构图
5.1.3&实体类
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&javax.persistence.C
import&javax.persistence.E
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.SequenceG
@Entity(name="H_HUSBAND_")
@SequenceGenerator(name="husband_seq_gene",&sequenceName="HUSBAND_SEQ",&allocationSize=1)
public&class&Husband&{
private&BigDecimal&
private&String&
private&Wife&
@Column(precision=4,&scale=0)
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="husband_seq_gene")
public&BigDecimal&getId()&{
@Column(length=30)
public&String&getName()&{
public&Wife&getWife()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&void&setName(String&name)&{
this.name&=&
public&void&setWife(Wife&wife)&{
this.wife&=&
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&javax.persistence.C
public&class&Wife&{
private&String&
private&BigDecimal&
@Column(name="wifeName")
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
@Column(precision=3)
public&BigDecimal&getAge()&{
public&void&setAge(BigDecimal&age)&{
this.age&=&
5.2&XML方式
5.2.1&类图
图5-3&类关联关系图
5.2.2&数据库表结构
图5-4&数据库表结构图
5.2.3&实体类
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
public&class&XML_Husband&{
private&BigDecimal&
private&String&
private&XML_Wife&
public&BigDecimal&getId()&{
public&String&getName()&{
public&XML_Wife&getWife()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&void&setName(String&name)&{
this.name&=&
public&void&setWife(XML_Wife&wife)&{
this.wife&=&
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
public&class&XML_Wife&{
private&String&
private&BigDecimal&
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
public&BigDecimal&getAge()&{
public&void&setAge(BigDecimal&age)&{
this.age&=&
5.2.4&对象映射文件
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_Husband"&table="H_HUSBAND_XML"&dynamic-update="true"&
&id&name="id"&type="big_decimal"&
&column&name="id"&precision="4"&scale="0"&/&
&generator&class="foreign"&
&param&name="property"&wife&/param&
&/generator&
&property&name="name"&length="30"&&/property&
&component&name="wife"&
&property&name="name"&column="WIFENAME"&/&
&property&name="age"&column="AGE"&precision="3"&/&
&/component&
&&&&&/class&
&/hibernate-mapping&
六、多对一单向关联
6.1&Annotation方式
6.1.1&类图(说明:一个人具备多套房子的所有权,这么多套房子属于这个人)
图6-1&类关联关系图
6.1.2&数据库表结构
图6-2&数据库表结构图
6.1.3&实体类
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&javax.persistence.C
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.JoinC
import&javax.persistence.ManyToO
import&javax.persistence.SequenceG
@Entity(name="H_HOUSE_")
@SequenceGenerator(name="HouseGene",&sequenceName="H_HOUSE_SEQ",&allocationSize=1)
public&class&House&{
private&BigDecimal&
private&String&
private&Person&//House(多)-Person(一),一个人可以有多个房子,而这些房子属于这一个人
@Column(precision=20)
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="HouseGene")
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getPosition()&{
public&void&setPosition(String&position)&{
this.position&=&
@ManyToOne
//@JoinColumn(name=&&)//可以指定外键名称
public&Person&getPerson()&{
public&void&setPerson(Person&person)&{
this.person&=&
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&javax.persistence.C
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.SequenceG
@Entity(name="H_PERSON_")
@SequenceGenerator(name="PersonGene",&sequenceName="H_PERSON_SEQ",&allocationSize=1)
public&class&Person&{
private&BigDecimal&Id;
private&String&
@Column(precision=21)
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="PersonGene")
public&BigDecimal&getId()&{
return&Id;
public&void&setId(BigDecimal&id)&{
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
6.2&XML方式
6.2.1&类图(说明:一个人具备多套房子的所有权,这么多套房子属于这个人)
图6-3&类关联关系图
6.2.2&数据库表结构
图6-4&数据库表结构图
6.2.3&实体类
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
public&class&XML_House&{
private&BigDecimal&
private&String&
private&XML_Person&
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getPosition()&{
public&void&setPosition(String&position)&{
this.position&=&
public&XML_Person&getPerson()&{
public&void&setPerson(XML_Person&person)&{
this.person&=&
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
public&class&XML_Person&{
private&BigDecimal&Id;
private&String&
public&BigDecimal&getId()&{
return&Id;
public&void&setId(BigDecimal&id)&{
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
6.2.4&对象映射文件
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_House"&table="H_HOUSE_XML"&dynamic-update="true"&
&id&name="id"&type="big_decimal"&
&column&name="ID"&precision="20"&scale="0"&/&
&generator&class="sequence"&
&param&name="sequence"&H_HOUSE_XML_SEQ&/param&
&/generator&
&property&name="position"&&/property&
&many-to-one&name="person"&
&column&name="PERSON_ID"&precision="21"&scale="0"&/&
&/many-to-one&
&&&&&/class&
&/hibernate-mapping&
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_Person"&table="H_PERSON_XML"&dynamic-update="true"&
&id&name="id"&type="big_decimal"&
&column&name="ID"&precision="21"&scale="0"&/&
&generator&class="sequence"&
&param&name="sequence"&H_XML_PERSON_SEQ&/param&
&/generator&
&property&name="name"/&
&&&&&/class&
&/hibernate-mapping&
注:(表)设计原则,在多的一方加外键
七、一对多单向关联
7.1&Annotation方式
7.1.1&类图(说明:一个人具备多套房子的所有权,这么多套房子属于这个人)
图7-1&类关联关系图
7.1.2&数据库表结构
图7-2&数据库表结构图
7.1.3&实体类
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&java.util.HashS
import&java.util.S
import&javax.persistence.C
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.JoinC
import&javax.persistence.OneToM
import&javax.persistence.SequenceG
@Entity(name="H_PERSON_")
@SequenceGenerator(name="PersonGene",&sequenceName="H_PERSON_SEQ",&allocationSize=1)
public&class&Person&{
private&BigDecimal&Id;
private&String&
private&Set&House&&houses&=&new&HashSet&House&();
@Column(precision=21)
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="PersonGene")
public&BigDecimal&getId()&{
return&Id;
public&void&setId(BigDecimal&id)&{
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
@OneToMany
@JoinColumn(name="HOUSE_ID")//不加会生成由一张中间表连接的共三张表
public&Set&House&&getHouses()&{
public&void&setHouses(Set&House&&houses)&{
this.houses&=&
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&javax.persistence.C
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.SequenceG
@Entity(name="H_HOUSE_")
@SequenceGenerator(name="HouseGene",&sequenceName="H_HOUSE_SEQ",&allocationSize=1)
public&class&House&{
private&BigDecimal&
private&String&
@Column(precision=20)
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="HouseGene")
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getPosition()&{
public&void&setPosition(String&position)&{
this.position&=&
7.2&XML方式
7.2.1&类图(说明:一个人具备多套房子的所有权,这么多套房子属于这个人)
图7-3&类关联关系图
7.2.2&数据库表结构
图7-4&数据库表结构图
7.2.3&实体类
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
import&java.util.HashS
import&java.util.S
public&class&XML_Person&{
private&BigDecimal&Id;
private&String&
private&Set&XML_House&&houses&=&new&HashSet&XML_House&();
public&BigDecimal&getId()&{
return&Id;
public&void&setId(BigDecimal&id)&{
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
public&Set&XML_House&&getHouses()&{
public&void&setHouses(Set&XML_House&&houses)&{
this.houses&=&
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
public&class&XML_House&{
private&BigDecimal&
private&String&
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getPosition()&{
public&void&setPosition(String&position)&{
this.position&=&
7.2.4&对象映射文件
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_Person"&table="H_PERSON_XML"&dynamic-update="true"&
&id&name="id"&type="big_decimal"&
&column&name="ID"&precision="21"&scale="0"&/&
&generator&class="sequence"&
&param&name="sequence"&H_XML_PERSON_SEQ&/param&
&/generator&
&property&name="name"/&
&set&name="houses"&
&key&&!--&指定H_HOUSE_XML表中的外键字段名,也可以&key&column="PERSON_ID"&/&&--&
&column&name="PERSON_ID"&precision="21"&/&
&one-to-many&class="XML_House"/&
&&&&&/class&
&/hibernate-mapping&
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_House"&table="H_HOUSE_XML"&dynamic-update="true"&
&id&name="id"&type="big_decimal"&
&column&name="ID"&precision="20"&scale="0"&/&
&generator&class="sequence"&
&param&name="sequence"&H_HOUSE_XML_SEQ&/param&
&/generator&
&property&name="position"&&/property&
&&&&&/class&
&/hibernate-mapping&
八、一对多、多对一双向关联
8.1&Annotation方式
8.1.1&类图
图8-1&类关联关系图
8.1.2&数据库表结构
图8-2&数据库表结构图
8.1.3&实体类
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&javax.persistence.C
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.ManyToO
import&javax.persistence.SequenceG
@Entity(name="H_HOUSE_")
@SequenceGenerator(name="HouseGene",&sequenceName="H_HOUSE_SEQ",&allocationSize=1)
public&class&House&{
private&BigDecimal&
private&String&
private&Person&
@Column(precision=20)
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="HouseGene")
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getPosition()&{
public&void&setPosition(String&position)&{
this.position&=&
@ManyToOne//如果需要指定外键字段使用@JoinColumn(name="PERSON_ID")
public&Person&getPerson()&{
public&void&setPerson(Person&person)&{
this.person&=&
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&java.util.HashS
import&java.util.S
import&javax.persistence.C
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.OneToM
import&javax.persistence.SequenceG
@Entity(name="H_PERSON_")
@SequenceGenerator(name="PersonGene",&sequenceName="H_PERSON_SEQ",&allocationSize=1)
public&class&Person&{
private&BigDecimal&Id;
private&String&
private&Set&House&&houses&=&new&HashSet&House&();
@Column(precision=21)
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="PersonGene")
public&BigDecimal&getId()&{
return&Id;
public&void&setId(BigDecimal&id)&{
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
@OneToMany(mappedBy="person")//参考了对方的属性名
public&Set&House&&getHouses()&{
public&void&setHouses(Set&House&&houses)&{
this.houses&=&
8.2&XML方式
8.2.1&类图
图8-3&类关联关系图
8.2.2&数据库表结构
图8-4&数据库表结构图
8.2.3&实体类
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
public&class&XML_House&{
private&BigDecimal&
private&String&
private&XML_Person&
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getPosition()&{
public&void&setPosition(String&position)&{
this.position&=&
public&XML_Person&getPerson()&{
public&void&setPerson(XML_Person&person)&{
this.person&=&
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
import&java.util.HashS
import&java.util.S
public&class&XML_Person&{
private&BigDecimal&Id;
private&String&
private&Set&XML_House&&houses&=&new&HashSet&XML_House&();
public&BigDecimal&getId()&{
return&Id;
public&void&setId(BigDecimal&id)&{
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
public&Set&XML_House&&getHouses()&{
public&void&setHouses(Set&XML_House&&houses)&{
this.houses&=&
8.2.4&对象映射文件
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_Person"&table="H_PERSON_XML"&dynamic-update="true"&
&id&name="id"&type="big_decimal"&
&column&name="ID"&precision="21"&scale="0"&/&
&generator&class="sequence"&
&param&name="sequence"&H_XML_PERSON_SEQ&/param&
&/generator&
&property&name="name"/&
&set&name="houses"&
&!&关联表中指向当前类对应表的外键字段名,也可以&key&column="PERSON_ID"&/&&--&
&column&name="PERSON_ID"&precision="21"&/&
&one-to-many&class="XML_House"/&
&&&&&/class&
&/hibernate-mapping&
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_House"&table="H_HOUSE_XML"&dynamic-update="true"&
&id&name="id"&type="big_decimal"&
&column&name="ID"&precision="20"&scale="0"&/&
&generator&class="sequence"&
&param&name="sequence"&H_HOUSE_XML_SEQ&/param&
&/generator&
&property&name="position"/&
&many-to-one&name="person"&column="PERSON_ID"/&
&!--&字段名与对应的XML_Person.hbm.xml中配置的set的key中column的值必须一致&--&
&&&&&/class&
&/hibernate-mapping&
九、多对多单向关联
9.1&Annotation方式
9.1.1&类图
图9-1&类关联关系图
9.1.2&数据库表结构
图9-2&数据库表结构图
9.1.3&实体类
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&java.util.HashS
import&java.util.S
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.JoinC
import&javax.persistence.JoinT
import&javax.persistence.ManyToM
import&javax.persistence.SequenceG
import&javax.persistence.T
@Entity(name="T")//name是用来在HQL语句中应用的本类的名字
@Table(name="H_TEACHER_")//数据库中当前类对应的表名
@SequenceGenerator(name="Teacher_Gene",&sequenceName="H_TEACHER_SEQ",&allocationSize=1)
public&class&Teacher&{
private&BigDecimal&
private&String&
private&Set&Student&&students&=&new&HashSet&Student&();
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="Teacher_Gene")
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
@ManyToMany
@JoinTable(
name="H_T_S",//指明中间表的名字
joinColumns={@JoinColumn(name="TEACHER_ID",&referencedColumnName="ID")},
//指明中间表参考当前类对应数据库表中的字段ID的外键名为TEACHER_ID
inverseJoinColumns={@JoinColumn(name="STUDENT_ID",referencedColumnName="ID")}
//指明中间表参考另外一张表中的字段ID的外键名为STUDENT_ID
public&Set&Student&&getStudents()&{
public&void&setStudents(Set&Student&&students)&{
this.students&=&
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.SequenceG
import&javax.persistence.T
@Entity(name="S")
@Table(name="H_STUDENT_")
@SequenceGenerator(name="Student_Gene",&sequenceName="H_STUDENT_SEQ",&allocationSize=1)
public&class&Student&{
private&BigDecimal&
private&String&
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="Student_Gene")
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
9.2&XML方式
9.2.1&类图
图8-3&类关联关系图
9.2.2&数据库表结构
图8-4&数据库表结构图
9.2.3&实体类
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
import&java.util.HashS
import&java.util.S
public&class&XML_Teacher&{
private&BigDecimal&
private&String&
private&Set&XML_Student&&students&=&new&HashSet&XML_Student&();
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
public&Set&XML_Student&&getStudents()&{
public&void&setStudents(Set&XML_Student&&students)&{
this.students&=&
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
public&class&XML_Student&{
private&BigDecimal&
private&String&
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
9.2.4&对象映射文件
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_Teacher"&table="H_TEACHER_XML"&dynamic-update="true"&
&id&name="id"&type="big_decimal"&
&column&name="ID"&precision="20"&scale="0"&/&
&generator&class="sequence"&
&param&name="sequence"&H_TEACHER_XML_SEQ&/param&
&/generator&
&property&name="name"/&
&set&name="students"&table="H_XML_T_S"&
&key&column="TEACHER_ID"/&
&!--中间表中指向当前类对应表的外键字段名为TEACHER_ID&--&
&many-to-many&class="XML_Student"&column="SUTDNET_ID"/&
&!--&中间表中指向XML_Student类对应表的外键字段名为STUDENT_ID&--&
&&&&&/class&
&/hibernate-mapping&
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_Student"&table="H_STUDENT_XML"&dynamic-update="true"&
&id&name="id"&type="big_decimal"&
&column&name="ID"&precision="21"&scale="0"&/&
&generator&class="sequence"&
&param&name="sequence"&H_XML_STUDENT_SEQ&/param&
&/generator&
&property&name="name"/&
&&&&&/class&
&/hibernate-mapping&
十、多对多双向关联
10.1&Annotation方式
10.1.1&类图
图10-1&类关联关系图
10.1.2&数据库表结构
图10-2&数据库表结构图
10.1.3&实体类
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&java.util.HashS
import&java.util.S
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.ManyToM
import&javax.persistence.SequenceG
import&javax.persistence.T
@Entity(name="S")
@Table(name="H_STUDENT_")
@SequenceGenerator(name="Student_Gene",&sequenceName="H_STUDENT_SEQ",&allocationSize=1)
public&class&Student&{
private&BigDecimal&
private&String&
private&Set&Teacher&&teachers&=&new&HashSet&Teacher&();
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="Student_Gene")
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
@ManyToMany(mappedBy="students")
public&Set&Teacher&&getTeachers()&{
public&void&setTeachers(Set&Teacher&&teachers)&{
this.teachers&=&
package&com.rongqq.hibernate3.annotation.
import&java.math.BigD
import&java.util.HashS
import&java.util.S
import&javax.persistence.E
import&javax.persistence.GeneratedV
import&javax.persistence.GenerationT
import&javax.persistence.Id;
import&javax.persistence.JoinC
import&javax.persistence.JoinT
import&javax.persistence.ManyToM
import&javax.persistence.SequenceG
import&javax.persistence.T
@Entity(name="T")
@Table(name="H_TEACHER_")
@SequenceGenerator(name="Teacher_Gene",&sequenceName="H_TEACHER_SEQ",&allocationSize=1)
public&class&Teacher&{
private&BigDecimal&
private&String&
private&Set&Student&&students&=&new&HashSet&Student&();
@GeneratedValue(strategy=GenerationType.SEQUENCE,&generator="Teacher_Gene")
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
@ManyToMany
@JoinTable(
name="H_T_S",//指明中间表的名字
joinColumns={@JoinColumn(name="TEACHER_ID",&
referencedColumnName="ID")},
//指明中间表参考当前类对应数据库表中的字段ID的外键名为TEACHER_ID
inverseJoinColumns={@JoinColumn(name="STUDENT_ID",&
referencedColumnName="ID")}
//指明中间表参考另外一张表中的字段ID的外键名为STUDENT_ID
public&Set&Student&&getStudents()&{
public&void&setStudents(Set&Student&&students)&{
this.students&=&
10.2&XML方式
10.2.1&类图
图10-3&类关联关系图
10.2.2&数据库表结构
图10-4&数据库表结构图
10.2.3&实体类
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
import&java.util.HashS
import&java.util.S
public&class&XML_Teacher&{
private&BigDecimal&
private&String&
private&Set&XML_Student&&students&=&new&HashSet&XML_Student&();
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
public&Set&XML_Student&&getStudents()&{
public&void&setStudents(Set&XML_Student&&students)&{
this.students&=&
package&com.rongqq.hibernate3.xml.
import&java.math.BigD
import&java.util.HashS
import&java.util.S
public&class&XML_Student&{
private&BigDecimal&
private&String&
private&Set&XML_Teacher&&teachers&=&new&HashSet&XML_Teacher&();
public&BigDecimal&getId()&{
public&void&setId(BigDecimal&id)&{
this.id&=&
public&String&getName()&{
public&void&setName(String&name)&{
this.name&=&
public&Set&XML_Teacher&&getTeachers()&{
public&void&setTeachers(Set&XML_Teacher&&teachers)&{
this.teachers&=&
10.2.4&对象映射文件
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_Teacher"&table="H_TEACHER_XML"&dynamic-update="true"&
&id&name="id"&type="big_decimal"&
&column&name="ID"&precision="20"&scale="0"&/&
&generator&class="sequence"&
&param&name="sequence"&H_TEACHER_XML_SEQ&/param&
&/generator&
&property&name="name"/&
&set&name="students"&table="H_XML_T_S"&
&key&column="TEACHER_ID"/&
&!--&中间表中指向当前类对应表的外键字段名为TEACHER_ID&--&
&many-to-many&class="XML_Student"&column="STUDENT_ID"/&
&!--&中间表中指向XML_Student类对应表的外键字段名为STUDENT_ID&--&
&&&&&/class&
&/hibernate-mapping&
&?xml&version="1.0"?&
&!DOCTYPE&hibernate-mapping&PUBLIC
&&&&&&&&"-//Hibernate/Hibernate&Mapping&DTD&3.0//EN"
&&&&&&&&"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&package="com.rongqq.hibernate3.xml.entity"&
&class&name="XML_Student"&table="H_STUDENT_XML"&dynamic-update="true"&
&id&name="id"&type="big_decimal"&
&column&name="ID"&precision="21"&scale="0"&/&
&generator&class="sequence"&
&param&name="sequence"&H_XML_STUDENT_SEQ&/param&
&/generator&
&property&name="name"/&
&set&name="teachers"&table="H_XML_T_S"&
&!--&相关联的类的映射文件两侧定义的中间表名字必须一致&--&
&key&column="STUDENT_ID"&/&
&!--&中间表中指向当前类对应表的外键字段名&--&
&many-to-many&class="XML_Teacher"&column="TEACHER_ID"&/&
&!--&中间表中指向与当前类关联的另外一个类所对应表的外键字段名&--&
&&&&&/class&
&/hibernate-mapping&

我要回帖

更多关于 hibernate映射配置 的文章

 

随机推荐