![](/img/trans.png)
[英]Deletions with Spring data/Hibernate: ORA-01407: Cannot update to Null
[英]JAVA + Hibernate: ORA-01407 when updating not null value
這是我的OrderNames pojo類映射:
...
<cache usage="transactional"/>
<id name="id" type="java.lang.Long">
<column name="ID" precision="19" scale="0" />
<generator class="sequence">
<param name="sequence_name">MY_SEQ</param>
</generator>
</id>
<property name="orderId" type="java.lang.Long">
<column name="ORDER_ID" precision="19" scale="0" not-null="true"/>
</property>
<property name="userId" type="java.lang.Long">
<column name="USER_ID" precision="19" scale="0" not-null="true"/>
</property>
<property name="orderName" type="java.lang.String">
<column name="ORDER_NAME" length="35" not-null="true"/>
</property>
...
這是我的pojo課程:
public class OrderNamesModel {
private Long id;
private Long orderId;
private Long userId;
private String orderName;
public String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getOrderId() {
return orderId;
}
public void setOrderId(Long orderId) {
this.orderId = orderId;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
而我的代碼:
public void changeOrderName(Long orderId, Long userId, String orderName) {
OrderModel orderModel = getOrderModelForUpdate(orderId, userId, orderName);
ordersDAO.saveOrder(orderModel);
}
private OrderModel getOrderModelForUpdate(Long orderId, Long userId, String orderName){
OrderModel orderModel = ordersDAO.get(orderId);
OrderNamesModel orderNameModel = ordersDAO.getByIdAndUserId(orderId, userId);
orderName = StringUtils.trimToEmpty(orderName);
if(StringUtils.isBlank(orderName)){
orderModel.setOrderNames(null);
}
else{
if(orderNameModel == null){
orderNameModel = new OrderNamesModel();
orderNameModel.setOrderId(orderModel.getOrderId());
orderNameModel.setUserId(userId);
}
orderNameModel.setOrderName(orderName);
orderModel.setOrderNames(new HashSet<>(Collections.singletonList(orderNameModel)));
}
return orderModel;
}
在使用orderName =“ New order Name”啟動它之后,我從數據庫獲取了現有行,並且在執行保存時發生了異常:
由以下原因引起:java.sql.SQLException:ORA-01407:無法更新(“ MY_DB”。“ ORDER_NAMES”。“ ORDER_ID”)為NULL
在調試模式下,在OrderNamesModel中將orderId的值設置為123
什么會引起這種奇怪的問題?
您具有此屬性:
<property name="orderName" type="java.lang.String"> <column name="ORDER_NAME" length="35" not-null="true"/> </property>
它指出ORDER_NAME
是NOT NULL
(我假設它直接映射到基礎表的NOT NULL
約束。
然后在您的getOrderModelForUpdate
函數中,執行以下操作:
orderModel.setOrderNames(null);
在給定函數名稱的情況下,然后使用它執行更新並嘗試將NOT NULL
屬性設置為NULL
並獲取錯誤
由以下原因引起:java.sql.SQLException:ORA-01407:無法更新(“ MY_DB”。“ ORDER_NAMES”。“ ORDER_ID”)為NULL
當您嘗試將NOT NULL
列設置為具有NULL
值時,這似乎是一個完全適當的錯誤。
如果您應該在列中具有NULL
值(並且空字符串與Oracle中的NULL
相同),則需要在表上刪除NOT NULL
約束。 相反,如果表約束正確,則不能將值設置為NULL
而應選擇另一個值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.