Java @ManyToMany Hibernate注释中正确的级联类型是什么?
我正在尝试在Hibernate中对一个瞬态操作解决方案模式进行建模,但我不确定如何从模型中获取所需的对象图和行为 表结构使用关联表(多对多)为操作创建用户列表:Java @ManyToMany Hibernate注释中正确的级联类型是什么?,java,hibernate,annotations,many-to-many,cascade,Java,Hibernate,Annotations,Many To Many,Cascade,我正在尝试在Hibernate中对一个瞬态操作解决方案模式进行建模,但我不确定如何从模型中获取所需的对象图和行为 表结构使用关联表(多对多)为操作创建用户列表: Operation OperationUsers Users op_id op_id user_id ... user_id ... 在使用hibernate注释对persistent class Operation.java进行
Operation OperationUsers Users
op_id op_id user_id
... user_id ...
在使用hibernate注释对persistent class Operation.java进行建模时,我创建了:
@ManyToMany(fetch=FetchType.LAZY)
@JoinColumn(name="op_id")
public List<User> users() { return userlist; }
@ManyToMany(fetch=FetchType.LAZY)
@JoinColumn(name=“op_id”)
公共列表用户(){return userlist;}
到目前为止,我有以下问题:
是否从用户表中删除用户?只需将其删除
从关联表,而不是用户表。我看不到有效的文件 级联类型来实现这一点
可能我想得太多了,但这是学习的本质。。。提前感谢您提供的任何帮助 来自文档: Hibernate定义并支持以下对象状态: *瞬态-如果对象刚刚使用新操作符实例化,并且与Hibernate会话没有关联,则该对象是瞬态的。它在数据库中没有持久表示,也没有分配标识符值。如果应用程序不再持有引用,则临时实例将被垃圾收集器销毁。使用Hibernate会话使对象持久化(并让Hibernate处理此转换需要执行的SQL语句) *持久性-持久性实例在数据库中具有表示形式和标识符值。它可能刚刚被保存或加载,但是,根据定义,它位于会话的范围内。Hibernate将检测对处于持久状态的对象所做的任何更改,并在工作单元完成时将状态与数据库同步。开发人员不会执行手动更新语句,也不会在对象应为瞬态时删除语句 *分离-分离实例是一个已持久化的对象,但其会话已关闭。当然,对对象的引用仍然有效,在这种状态下甚至可能修改分离的实例。分离的实例可以在稍后的时间点重新连接到新会话,使其(以及所有修改)再次持久化。此功能为需要用户思考时间的长时间运行的工作单元启用编程模型。我们称之为应用程序事务,即从用户的角度来看的工作单元
如中所述,您可以使用Session.execute()分离实体,以防止hibernate更新数据库,或者简单地克隆数据库并对副本进行必要的更改。事实证明,我的主要问题(#1和主主题)的具体答案是:“不要在属性上指定任何级联类型。”
答案在。当我说
operation.addUser(aUser)
时,我希望Hibernate执行insert-into-correlation\u-table值(op\u-id,user\u-id)
,当我说operation.removeUser(aUser)
时,我希望Hibernate执行delete-from-correlation\u-table,其中op\u-id=?用户id=?
。我要避免的是从user\u id=?的用户中删除。