大佬教程收集整理的这篇文章主要介绍了java – Spring Data JPA JpaRepository.save(实体)不返回数据库默认值,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个相当简单的问题.在单个事务中,我的代码看起来像这样:
@H_805_5@myClass c = new MyClass(); c.setPropA("A"); c = myClassRepository.save(c); c.setPropC("C"); @H_618_7@我的实体看起来像这样:
@Entity @Table(name = "MY_CLASS") public class MyClass { private String propA; private String propB; private String propc; @Id @column(name = "PROP_A",unique = true,nullable = false,updatable = falsE) public String getPropA() { return propA; } public void setPropA(String propA) { this.propA = propA; } @column(name = "PROP_B",insertable = falsE) public String getPropB() { return propB; } public void setPropB(String propB) { this.propB = propB; } @column(name = "PROP_C") public String getPropC() { return propc; } public void setPropC(String propC) { this.propC = propc; } }
@H_618_7@并且数据库设置如下(Dialect = Oracle 11G)
create table MY_CLASS { PROP_A VARCHAR2 NOT NULL PRIMary KEY,PROP_B VARCHAR2 DEFAULT 'B' NOT NULL,PROP_C VARCHAR2 }
@H_618_7@
@H_805_5@myClass c = new MyClass(); c.setPropA("A"); c = myClassRepository.saveAndFlush(c); // INSERT INTO MY_CLASS (PROP_A,PROP_C) VALUES ("A",NULL) // SELECT PROP_A,PROP_B,PROP_C FROM MY_CLASS -- to refresh `c` c.setPropC("C"); // After transaction ends,flush change to `c.propC` // updatE MY_CLASS SET PROP_B = "B",PROP_C = "C" WHERE PROP_A = "A" @H_618_7@由于updatE紧跟INSERT并且c.propB仍为null,因此会中断.我得到一个ORA-01407:无法更新(“MY_scheR_685_11845@A”.“MY_CLASS”.“PROP_B”)到NULL堆栈跟踪.
我知道有很多方法可以使用@PrePersist或在Java中的columnDeFinition上设置默认值,但我不应该重复默认值.
注意:这在我使用org.hibernate.Session.saveOrupdate()而不是Spring Data JPA进行此操作之前有效.
在此先感谢您的帮助!
以上是大佬教程为你收集整理的java – Spring Data JPA JpaRepository.save(实体)不返回数据库默认值全部内容,希望文章能够帮你解决java – Spring Data JPA JpaRepository.save(实体)不返回数据库默认值所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。