Hibernate的注解many-to-one
2016-07-26 19:57
513 查看
Hibernate的注解many-to-one
Hibernate 学习应用
項目中一個實例:
最近使用annotation做hibernate映射,有两张表乘客(Passanger)表 和订单(VacationOrder )表,乘客表和订单表是ManyToOne,业务只需要从订单表出发设置不同乘客,根据乘客查看预订的订单,采用双向关联,ManyToOne 和Many-To-One
VacationOrder 對象中关于乘客的注解:
VacationOrder 对象继承自Order:
@Entity
@Table(name = "VAC_ORDER")
public class VacationOrder extends Order:
/**
* 乘客
*/
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "order")
@JoinColumn(name = "orderId")
private List<Passanger> passangers = new ArrayList<Passanger>();
在乘客的Passager中关于订单的注解:
@Entity
@GenericGenerator(name = "seq_gen", strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator", parameters = {
@Parameter(name = "sequence_name", value = "seq_Passanger"),
@Parameter(name = "initial_value", value = "100000") })
public class Passanger extends Consumer ;
@ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)
@JoinColumn(name = "orderId", insertable = false, updatable = false)
private Order order;
@Column(name = "orderId")
private Long orderId;
注意:在Passager 对象中将属性 order和orderId映射同一张表中统一字段,目的这样可以查询时适当的减少相关的查询.
在订单中相应的乘客发生变化时,保存订单可以更改乘客的信息.
如果修改乘客的信息是:
保存订单时,更给关联中的对象不起作用
查看以下帮助文档:
总结以下:
(1)在乘客表中order和orderId,同时映射一张表的时候,必须设置insertable = false, updatable = false否则将报错,order对象必须设置inserte = false, update = false.
(2)在关联的订单中乘客发生变化时必须将关联的Id设置为null.否则数据库中的乘客的信息不会发生变化.
@ManyToOne(cascade = { CascadeType.PERSIST,CascadeType.MERGE}) 它始终是不对VacationOrder 进行更新和新增操作,如果改成@ManyToOne(cascade
= { CascadeType.ALL})就可以更新和新增VacationOrder表,但删除操作是我业务不允许有的。
官方解释如下:
CascadeType.PERSIST:级联新增
CascadeType.MERGE:级联合并
CascadeType.REFRESH:级联刷新
CascadeType.REMOVE:级联删除
CascadeType.ALL:以上四种都是
在Passanger表关系定义如下:
@ManyToOne(cascade = { CascadeType.PERSIST,CascadeType.MERGE})
@JoinColumn(name = "orderId")
但我在后台方法测试时,如果订单信息修改或新建,保存到乘客表中,医院信息不会级联更新或新增,级联关系不起作用 .
CascadeType.PERSIST(级联新建),CascadeType.MERGE(级联合并),如果我把annotation方式改为CascadeType.ALL,级联更新和新增就可以.
相关文章推荐
- 【CodeForces】[448D]Multiplication Table
- 网络流-Dinic算法详解与模板
- java的21个技术点,你造吗
- 写模态对话框的问题:运用this.index 为元素添加事件
- magedu Linux 运维学习的第三天
- JDBC连接数据库
- 关于历史命令和一些简单的快捷键的初识;以及man帮助
- 自动释放池什么时候创建,什么时候销毁?
- AsyncTask和Handler对比
- [SCU4442] Party [2015 Sichuan Province Contest Final G]
- Java数据类型小结
- hdu 2089 不要62 数位dp
- 翻山越岭上uvaoj
- C#预处理指令
- js注意事项11
- Linux 文件权限笔记
- Android加载动画系列—— CircularJumpLoadingAnim
- dom4j CURD
- Spring Aop的理解和概念
- 达内学习笔记——主方法参数