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 链接的主要内容,如果未能解决你的问题,请参考以下文章