java - 如何在Hibernate中模拟 "ON UPDATE NO ACTION"

标签 java sql hibernate hibernate-mapping

我有以下要做

@Entity
@Table(schema = "USERCVT", name = "Table1")
public class DeviceMasterDO implements Serializable{

@OneToMany(cascade = CascadeType.ALL, mappedBy = "deviceMasterDO", orphanRemoval = true)
private List<InOutTransactionDO> inOutTransactionDOs;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "deviceMasterDO", orphanRemoval = true)
private List<AdminTransactionDO> adminTransactionDOs;
/*************MORE CODE**************/
}

当我尝试更新 DeviceMasterDO 时,它也会在 InOutTransactionDO 和 AdminTransactionDO 中执行更新。我只想更新 DeviceMasterDO。我怎样才能实现这一目标?

问题: 如果 DeviceMasterDO 的 InOutTransactionDO 和 AdminTransactionDO 均不为空,则更新工作正常并执行 -

Hibernate: update schema.Table1 set .....
Hibernate: update schema.Table2 set ....
Hibernate: update schema.Table3 set ...

如果 DeviceMasterDO 的 InOutTransactionDO 和 AdminTransactionDO 为空,则更新失败 -

Hibernate: insert into usercvt.Table2 (a,b,c) values (?, ?, ?)
2016-06-14 17:51:44 ERROR SqlExceptionHelper:146 - [SQL0407] Null values not allowed in column or variable b. 

最佳答案

请您考虑删除以下内容:

级联 = CascadeType.ALL

请按如下方式声明inOutTransactionDOs:

@OneToMany(mappedBy = "deviceMasterDO", orphanRemoval = true)
private List<InOutTransactionDO> inOutTransactionDOs;

adminTransactionDOs如下:

@OneToMany(mappedBy = "deviceMasterDO", orphanRemoval = true)
private List<AdminTransactionDO> adminTransactionDOs;

关于java - 如何在Hibernate中模拟 "ON UPDATE NO ACTION",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37824021/

相关文章:

java - 以编程方式创建 Log4j 2.x FileAppender

java - QueryDSL Unexpected Token ,带有 any() 和 in 子句

hibernate - 延迟初始化失败 - 没有 session 或 session 已关闭

java - 包装类如何将数据类型的值包装在其对象周围?

java - createCriteria 和 createAlias 的区别

mysql - 从同一列中选择特定值的每日数量

使用 WHERE 子句的 Android sql 查询

java - Hibernate - 控制插入和更新查询

java - Hibernate中级联删除的问题

sql - 对于一台机器上的结构化数据,NoSQL是否比RDBMS有任何真正的优势?