Hibernate一对多映射 添加问题

Hibernate一对多映射 添加问题,第1张

在save一个新的Reply时,必须保证Reply的topic属性有值,例如

Reply

reply

=

new

Reply()

reply.setid(1)

reply.setTitle("回复:xx")

reply.setContent("楼主SB")

//关键在下面这一句

reply.setTopic(topic)//此句确保reply关联到相应的topic对象

其中topic是一个Topic对象,里面的id必须是数据库已有的id

楼上的cascade='save-update'

是级联save

当配置了cascade属性后

如果reply所关联的topic属性在数据库不存在相应的ID

那么hibernate会级联将topic对象持久化到数据库中

楼主的问题应该不是楼上兄弟的回答

因为即便不配置cascade,只要reply所对应的topic已是持久化或游离对象

hibernate也会为在数据库中为reply的topicid字段添加

只需要reply.setTopic()就行了

举例订单与客户

多对一关系模型

· 首先是导包 这个省略不写了

· 其次写domain类

分为Client Order两个类 因为是多对一的关系 所以外键应该放在Order这个类里

配置文件 hibernate cfg xml

[java]

<hibernate configuration>

<session factory name= foo >

<property name= nnection driver_class >mysql jdbc Driver</property>

<property name= connection url >jdbc:mysql:///test</property>

<property name= connection username >root</property>

<property name= connection password >root</property>

<property name= dialect >hibernate dialect MySQLDialect</property>

<property name= show_sql >true</property>

<property name= hbm ddl auto >update</property>

<mapping resource= /hbsi/domain/Client hbm xml />

<mapping resource= /hbsi/domain/Order hbm xml />

</session factory>

</hibernate configuration>

定义一个Client的变量

·然后写配置文件 Client hbm xml

<hibernate mapping package= hbsi domain >

<class name= Client table= client >//类名和表名

<id name= id column= id >//变量和字段

<generator class= native />//根据数据库里的设置自定义

</id>

<property name= name />

</class>

</hibernate mapping>

Order hbm xml

<hibernate mapping>

<class name= Order table= ordershop >

<id name= id >

<generator class= native />

</id>

<property name= shopname column= shopname />

<property name= number column= number />

<property name = price column= price />

<many to one name= client column= client_id />

<class>

</hibernate mapping>

配置文件这样就写完了 接下来就是添加查找

Session session=null

@Test

public void add(Client client Order order){

try{

session = HibernateUtil getSession() //获取工具类

session beginTransaction() //开启事务

/*Client client = new Client()

client setName( 刘总 )

Order order = new Order()

order setShopname( 航空母舰 )

order setNumber( )

order setPrice( )

order setCt(client)

Order order = new Order()

order setShopname( 航空母舰 )

order setNumber( )

order setPrice( )

order setCt(client) */

session save(client)

session save(order)

session beginTransaction() mit()

}finally{

if(session!=null){

session close()

}

}

}

public void find(int id){

try{

session = HibernateUtil getSession()

session beginTransaction()

Order order = (Order) session get(Order class id)

System out println(order getCt() getName())

session beginTransaction() mit()

}finally{

if(session!=null){

session close()

}

}

}

测试

public static void main(String[] args ){

Client client = new Client()

client setName( xiao总 )

Order order = new Order()

order setShopname( 美国 )

order setNumber( )

order setPrice( )

order setCt(client)

Order order = new Order()

order setShopname( 日本 )

order setNumber( )

order setPrice( )

order setCt(client)

Many one mo = new Many one()

mo add(client order )

mo find( )

}

关系模型一对多

Client hbm xml

<hibernate mapping package= hbsi domain >

<class name= Client table= client >

<id name= id column= id >

<generator class = native />

</id>

<property name= name />

<set name= order table= ordershop cascade= save update >

<key column= user_id />

<one to many class= Order   />

</set>

</class>

</hibernate mapping>

Order hbm xml

<hibernate mapping package= hbsi domain >

<class name= Order table= ordershop >

<id name= id >

<generator class = native />

</id>

<property name= shopname column= shopname />

<property name= number column= number />

<property name= price column= price />

</class>

</hibernate mapping>

添加方法

public void add(Client client Order order){

try{

session = HibernateUtil getSession()

session beginTransaction()

session save(client)

//  session save(order)

session beginTransaction() mit()

}finally{

if(session!=null){

session close()

}

}

}

public void find(int id){

try{

session = HibernateUtil getSession()

session beginTransaction()

Client client = (Client) session get(Order class id)

Set<Order>orders  =client getOrder()

orders size()

session beginTransaction() mit()

}finally{

if(session!=null){

session close()

}

}

lishixinzhi/Article/program/Java/ky/201311/28399

通常是建个HashSet,把多的一方的对象全放到HashSet里,set到一的一方的关联Set属性,再调用一的一方的save *** 作

实际使用中还要注意配置中cascade和inverse的影响,配置不当可能会失败


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/8011076.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存