JPA DAO Update行没有完整的行上下文

时间:2015-06-25 10:55:46

标签: java jpa entitymanager

拥有一个包含> 70列的表格。

我在.java对象中使用了大约8个这些列,包括id - 不确定是否重要。

我的Id列包含以下内容:

@Column(name = "pseudonym", nullable = false)
@Basic(fetch = FetchType.EAGER)
@Id

我的问题是:

如果我想使用xxxDAO.store(updatedRow)更新行 - 我是否需要指定任何引用行ID的内容,或者我在这里遗漏了什么?

我收到以下异常:

DEBUG: org.springframework.web.servlet.DispatcherServlet - Could not complete request
javax.persistence.PersistenceException: org.hibernate.exception.DataException: Could not execute JDBC batch update
.. ~(adding this in here)~ not a valid month

希望我已经解释得这么好了。如果我没有,请告诉我。

提前致谢

一些伪代码供参考:

item = dao.getItemById(123);
item.setUpdateTime(theTime);
dao.store(item);

商店:return getEntityManager().merge(itemToStore);

澄清

我收到了not a valid month以上的例外情况。这是因为我试图更新一个具有定义为时间戳的列的Oracle表。我试图传递一个String值(即使String基本上是相同的结构)。

为了尝试调试这个,我的问题是我是否可以通过JPA DAO更新一行而不需要例如我的Java对象中定义的所有70多列。事实证明这是可能的,并且该例外与没有定义列无关。 唯一的例外是因为我试图更新的时间戳没有正确的结构。我将Strings更改为Date对象,然后更新了

1 个答案:

答案 0 :(得分:0)

我的问题是:

  

如果我想使用xxxDAO.store(updatedRow)更新行 - 我是否需要   指定任何引用行ID的东西,或者我错过了什么   这里吗?

答案

- 它是自动管理的,您不需要指定标识符,也不需要为表中的所有列创建所有引用你的java对象。

item = dao.getItemById(123); // get item from dao in the database
item.setUpdateTime(theTime); // set/or change a value
dao.store(item); // contains merge(), and subsequently flush()

item包含对将要更新的行的引用。

此外,在处理sql表中的时间戳时,请确保所有都是实际的Date对象而不是字符串。

将日期作为字符串拉为只读时很好。但是如果您希望以后通过合并更新此行,则String将不起作用。日期的值将再次重新传递(作为String),并导致抛出异常(例如,不是有效的月份)。确保您的日期/时间戳存储为Date对象而不是字符串,并且可能在UI上将它们串起来。