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使用起来很卡,解决办法

如何将 JPA 添加到现有的 Eclipse 项目?

如何阻止 eclipse 从表中自动创建 JPA 实体?

Eclipse 通过JPA自动生成注解实体

JPA 2.1 在 Eclipse 开普勒中不起作用

用Eclipse生成JPA元模型