public class ClassWithALongName {
@ManyToOne
@OnDelete(action = OnDeleteAction.CASCADE)
private ClassA myClassA;
// getter-setter of myClassA
}
假设aClassC是一个ClassC实例,运行以下行:
org.hibernate.Session session = (Session)getEntityManager().getDelegate();
session.saveOrUpdate(aClassC);
session.flush();
在此之后,将为ClassA、ClassB和ClassC运行三个update语句(这是预期的)。
我没有想到的是,一个表上的delete语句并不是这样存在的:
delete from ClassA_ClassWithALongName where ClassA_id=?
java.sql.SQLSyntaxErrorException: ORA-00972: identifier is too long
埃塞克斯男孩的回答帮我解决了问题。实体非常复杂,有人添加了一个我没有注意到的一对多关联的列表。我仍然不明白为什么在更新过程中需要一个delete语句,但我将暂且不提这个问题:)
ClassA_ClassWithALongName是hibernate需要的联接表
我想你在什么地方有一个@OneTomany的关系。
要防止连接表,您需要以下内容:
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name="DICTIONARY_ID")
在mysql工作台中,我试图执行 这是一个查询,但是我收到了这个消息 错误代码:1175。您使用的是安全更新模式,并且您试图更新一个没有使用键列禁用安全模式的表,请在“首选项”中切换该选项-
我有一个关于电影和演员的数据库。我想做的是:我想从相应的数组列表中获取演员数据(如姓名、国家、出生日期),并将这些数据插入到我的演员表中。我想对我的电影桌做同样的事情。以下是我的部分代码: 然后我得到这些错误: > < li> 线程“main”javax . persistence . roll back异常:提交事务时出错 -原因:javax.persistence。PersistenceExc
我使用BlobTrigger模板创建了一个新的C#Azure函数,其中包含一个blob触发器。然后,我将blob触发器绑定的类型更改为CloudBlockBlob。接下来,我尝试添加一行来删除blob。结果是函数编译错误: 我错过了什么?根据文档CloudBlockBlob应该有一个名为DeleteIfExists的方法。 这是我的整个功能:
我正在学习hibernate和Spring Boot(也是Thymeleaf),遇到了以下问题: 环境:我有一个表单,处理创建和更新数据基于ID参数在GET方法,如果ID等于数据库中的一行,那么更新,否则保存。ID存储在隐藏的输入标记中,并与表单数据一起插入到实体对象中。然后将该对象发送给一个服务,该服务调用DAO来使用saveOrUpdate()方法保存或更新数据。 问题总结:在我的服务中,我有
我在一个实体上有一个简单的单向ManyToOne关系,不幸的是,这个关系是在一个我无法更改的模式中定义的。
问题内容: 在JPA中,有什么方法可以复制Hibernate的saveOrUpdate行为, 它实质上检查数据库中是否已存在该对象,并根据需要更新该对象或保存该对象的新实例。 JPA无事务读取很不错,但是Hibernate确实缺少这种方法。有经验的JPA开发人员如何处理此问题? 问题答案: 尝试使用该方法-这非常相似。 Xebia的博客文章中对差异有一个很好的描述:“ JPA实施模式:保存(独立)