java-Spring-Data JPA:建模图形时删除边获得“列违反非空”
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Spring-Data JPA:建模图形时删除边获得“列违反非空”,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1403字,纯文字阅读大概需要3分钟。
内容图文
![java-Spring-Data JPA:建模图形时删除边获得“列违反非空”](/upload/InfoBanner/zyjiaocheng/662/a7b838d4675b4ff59bc845d5aadb034e.jpg)
我有一组构建某种图形的实体.这由类Entity建模,其中两个字段对实体之间的关系进行建模.
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "fromId")
private Set<EntityRelation> outEdges;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "toId")
private Set<EntityRelation> inEdges;
保存时,所有outEdge都应属于该实体,inEdge是从这些实体“推断”的.问题是,在删除边缘后,我总是收到错误错误:列“ fromid”中的null值违反了非null约束,其中fromid是EntityRelation的字段.
出于性能原因,我不想从实体到实体直接建立联系.
为了解决这个问题,我使用了一个新的Spring-Data JPA方法(在相应的Repository类中)来显式删除实体指向的所有内容(例如
@Modifying
@Query(value = "delete from entityrelation where fromid = ?1", nativeQuery = true)
int deleteEntityRelations(String entityId);
但这以某种方式遗漏了全部要点,因为我希望JPA对此负责.
这是怎么了我真的很困惑,因为我能找到的所有帖子都建议它应该只与孤立删除一起使用.
在SQL-Trace中,您可以看到org.hibernate.SQL-更新EntityRelation设置fromId = null其中fromId =?和id =?自动发出(然后触发错误).
谢谢并恭祝安康
rick
解决方法:
这是休眠的已知问题.在某些情况下(您找到了其中一种),它违反了对外键关系的约束.有多种选择(但恐怕您可能不喜欢其中任何一种)
>删除约束.我知道我知道 ..
>设置为constraint deferred.不确定除Oracle以外的其他数据库是否提供此功能.
>将期望限制为JPA.认真地说,您似乎希望从中获得更多,然后它就会为您提供.我强烈建议reading this article使用任何类型的ORM进行任何项目之前.
内容总结
以上是互联网集市为您收集整理的java-Spring-Data JPA:建模图形时删除边获得“列违反非空”全部内容,希望文章能够帮你解决java-Spring-Data JPA:建模图形时删除边获得“列违反非空”所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。