hibernate 一对多中添加一方级联添加多的数据怎么添加?

hibernate 一对多中添加一方级联添加多的数据怎么添加?,第1张

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

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

在本文中主要实现数据的级联插入 下面模拟的场景是 用户有多个订单 在插入用户的时候 将用户的订单添加到订单表中

下面是User 和 Order两个pojo类的代码

[java]

public class Order {

private int id

private int whoid   // thi id of the order s User

private User user

public User getUser() {

return user

}

public void setUser(User user) {

this user = user

}

public int getId() {

return id

}

public void setId(int id) {

this id = id

}

public int getWhoid() {

return whoid

}

public void setWhoid(int whoid) {

this whoid = whoid

}

}

public class Order {

private int id

private int whoid   // thi id of the order s User

private User user

public User getUser() {

return user

}

public void setUser(User user) {

this user = user

}

public int getId() {

return id

}

public void setId(int id) {

this id = id

 昌伍 }

public int getWhoid() {

return whoid

}

public void setWhoid(int whoid) {

this whoid = whoid

}

}

[java]

public class User {

private int id

private String username

private String password

橡塌//这里需要注意的是使用集合必须使用Set 而不能用HashSet 否者在插入数据的时候会抛出一个参数不匹配异常

private Set<Order>orders

public Set<Order>getOrders() {

return orders

}

public void setOrders(Set<Order>orders) {

this orders = orders

}

public int getId() {

return id

}

public void setId(int id) {

this id = id

}

public String getUsername() {

return username

}

public void setUsername(String username) {

this username = username

}

public String getPassword() {

return password

}

public void setPassword(String password) {

this password = password

耐如或}

}

public class User {

private int id

private String username

private String password

//这里需要注意的是使用集合必须使用Set 而不能用HashSet 否者在插入数据的时候会抛出一个参数不匹配异常

private Set<Order>orders

public Set<Order>getOrders() {

return orders

}

public void setOrders(Set<Order>orders) {

this orders = orders

}

public int getId() {

return id

}

public void setId(int id) {

this id = id

}

public String getUsername() {

return username

}

public void setUsername(String username) {

this username = username

}

public String getPassword() {

return password

}

public void setPassword(String password) {

this password = password

}

}

下面这个是UserDao 这个就没有什么好说的了

[java]

import hibernate Session

import hibernate Transaction

import example domain User

public class UserDao {

private Session session

public UserDao(Session session )

{

this session = session

}

public void savaUser(User user)

{

Transaction tx = session beginTransaction()

try

{

session save(user)

mit()

}

catch(Exception ex)

{

ex printStackTrace()

tx rollback()

}

}

}

import hibernate Session

import hibernate Transaction

import example domain User

public class UserDao {

private Session session

public UserDao(Session session )

{

this session = session

}

public void savaUser(User user)

{

Transaction tx = session beginTransaction()

try

{

session save(user)

mit()

}

catch(Exception ex)

{

ex printStackTrace()

tx rollback()

}

}

}

下面的这两个hbm xml文件十分重要

User hbm xml

[]

<?xml version= encoding= UTF ?>

<!DOCTYPE hibernate mapping PUBLIC

//Hibernate/Hibernate Mapping DTD //EN

hiber/hibernate mapping dtd >

<hibernate mapping>

<class name= example domain User table= user >

<id name= id column= id type= java lang Integer >

<generator class= increment ></generator>

</id>

<property name= username column= username type= java lang String ></property>

<property name= password column= password type= java lang String ></property>

<set name= orders cascade= save update inverse= false >

<key column= whoid ></key>

<one to many class= example domain Order />

</set>

</class>

</hibernate mapping>

<?xml version= encoding= UTF ?>

<!DOCTYPE hibernate mapping PUBLIC

//Hibernate/Hibernate Mapping DTD //EN

hiber/hibernate mapping dtd >

<hibernate mapping>

<class name= example domain User table= user >

<id name= id column= id type= java lang Integer >

<generator class= increment ></generator>

</id>

<property name= username column= username type= java lang String ></property>

<property name= password column= password type= java lang String ></property>

<set name= orders cascade= save update inverse= false >

<key column= whoid ></key>

<one to many class= example domain Order />

</set>

</class>

</hibernate mapping>

其中要理解的就是set这个标签 这个标签对应了User对象中的集合对象 name依然是User中属性的名字 inserse为false表示了这种一对多的关系由User来维护 默认值就是false 那么那一方就有责任负责之间的关联关系 说白了就是hibernate如何生成Sql来维护关联的记录 比如说当User的状态发生了改变 这种改变会延伸到每一个关联到这个User的Order上

key标签用来表明 这两个关系是通过那个属性来连接的 那么Order表中的外键是whoid 那么这两个关系是通过whoid来维护的 one to many表示一对多的关系 其中class表示Set集合中的对象类型 也可以这么理解 即一对多的关系 多的一方的类型是什么

Order hbm xml

[]

<?xml version= encoding= UTF ?>

<!DOCTYPE hibernate mapping PUBLIC

//Hibernate/Hibernate Mapping DTD //EN

hiber/hibernate mapping dtd >

<hibernate mapping>

<class name= example domain Order table= Orders >

<id name= id column= id type= java lang Integer >

<generator class= increment ></generator>

</id>

<many to one name= user class= example domain User column= whoid ></many to one>

</class>

</hibernate mapping>

<?xml version= encoding= UTF ?>

<!DOCTYPE hibernate mapping PUBLIC

//Hibernate/Hibernate Mapping DTD //EN

hiber/hibernate mapping dtd >

<hibernate mapping>

<class name= example domain Order table= Orders >

<id name= id column= id type= java lang Integer >

<generator class= increment ></generator>

</id>

<many to one name= user class= example domain User column= whoid ></many to one>

</class>

</hibernate mapping>

其中的 many to one 表示多对一的关系 name表示Order中表示用来关联用户的那个属性的名称 class表示一的那一方的类型 column表示关联关系中用来连接的列 这里仍然是whoid

下面是测试代码

[java]

public class Test {

public static void main(String args[])

{

User user = new User()

user setUsername( Neway )

user setPassword( admin )

HashSet<Order>orders  = new HashSet<Order>()

Order o = new Order()

Order o = new Order()

Order o = new Order()

orders add(o )

orders add(o )

orders add(o )

user setOrders(orders)

Session session = HibernateSessionFactory getSession()

UserDao dao = new UserDao(session)

dao savaUser(user)

}

}

public class Test {

public static void main(String args[])

{

User user = new User()

user setUsername( Neway )

user setPassword( admin )

HashSet<Order>orders  = new HashSet<Order>()

Order o = new Order()

Order o = new Order()

Order o = new Order()

orders add(o )

orders add(o )

orders add(o )

user setOrders(orders)

Session session = HibernateSessionFactory getSession()

UserDao dao = new UserDao(session)

dao savaUser(user)

}

lishixinzhi/Article/program/Java/ky/201311/28639


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

原文地址: http://outofmemory.cn/bake/11968968.html

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

发表评论

登录后才能评论

评论列表(0条)

保存