JPA 2.0 Eclipse 链接
Posted
技术标签:
【中文标题】JPA 2.0 Eclipse 链接【英文标题】:JPA 2.0 Eclipse Link 【发布时间】:2010-04-29 15:57:00 【问题描述】:我有这个代码
@Column(updatable=false)
@Enumerated(EnumType.STRING)
private ExamType examType;
但是,当我通过合并更新它时,我仍然可以更改该值。为什么?
【问题讨论】:
更改数据库中的值?哪个是数据库? 我的程序中没有..mysql 5.1 我的意思是——数据库中的值被改变了? 【参考方案1】:好的。首先,如果您希望examType
列包含在SQL UPDATE
语句中,则不应使用updatable=false
对其进行标记。话虽如此,updatable=false
似乎在不与insertable=false
结合使用时被忽略,但这是 EclipseLink (Bug 243301) 中的一个错误,这不是 JPA 所说的。将其设置为 true
或将其删除。
其次,使用以下实体:
@Entity
public class MyEntity
@Id
@GeneratedValue
private Long id;
@Column(updatable = true)
@Enumerated(EnumType.STRING)
private ExamType examType;
...
以下测试方法在 EclipseLink 上运行良好:
@Test
public void testUpdateOfEnum()
MyEntity e = new MyEntity();
e.setExamType(ExamType.A);
em.persist(e);
em.flush();
assertNotNull(e.getId());
assertEquals(ExamType.A, e.getExamType());
e.setExamType(ExamType.B);
em.merge(e);
em.flush();
em.refresh(e); // to ensure we assert against value read from the db
assertEquals(ExamType.B, e.getExamType());
在生成的 SQL 语句下方:
插入到实体中(ID,EXAMTYPE)值(?,?) 绑定 => [1, A] UPDATE ENTITYWITHENUM SET EXAMTYPE = ?哪里(ID =?) 绑定 => [B, 1] SELECT ID, EXAMTYPE FROM ENTITYWITHENUM WHERE (ID = ?) 绑定 => [1]老实说,EclipseLink 中这样一个基本的东西上的错误是不太可能的,如果我可以的话,不仅仅是你这边的错误 :)
更新:在阅读了 OP 的评论后,我想我现在得到了问题(说实话完全不清楚):OP 实际上不希望 examType
成为更新这与我最初的理解完全相反。所以OP实际上是面对Bug 243301(修复在2.0.2中发布):
EclipseLink 只允许映射是可写或只读的。同时标记为 insertable=false 和 updatable=false 的映射将被设置为只读。
Bug 294803 中描述了另一种解决方法(与前一个相同)。
【讨论】:
我说我不想被更新...它应该被修复... UPDATE ENTITYWITHENUM SET EXAMTYPE = ? WHERE (ID = ?) bind => [B, 1] 永远不应该被调用...你告诉我如何更新?我不想更新值...对不起 @Parhs 很抱歉,但我回答了我从您的问题中理解的内容。也许你的问题不是很清楚或问得不好。但我想我现在明白了。让我更新我的答案。 我不是以英语为母语的人:( 无论如何...我想让一个特定的列只读,但可插入。由于错误... insertable=false 和 updatable=false 只能工作.但是将它们设置为假我将无法坚持!!所以只有这些解决方案出现在我的脑海中...... 1)通过 id 查找,然后手动更新附加的实体.. 2)创建自定义更新查询(这似乎很糟糕我) @Parhs 我想通了,没关系(“如何”中的小空间非常令人困惑)。不过没必要喊(“I SAID”),我只是想让你知道。反正没问题。 好的,谢谢!我认为 2.02 版已经发布了……我对 eclipselink 很生气……以上是关于JPA 2.0 Eclipse 链接的主要内容,如果未能解决你的问题,请参考以下文章
在使用 eclipse 时, eclipse 的右下角 一直在提示 “JPA java change event handler” ,eclipse使用起来很卡,解决办法