Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有完整行上下文的JPA DAO更新行_Java_Jpa_Entitymanager - Fatal编程技术网

Java 没有完整行上下文的JPA DAO更新行

Java 没有完整行上下文的JPA DAO更新行,java,jpa,entitymanager,Java,Jpa,Entitymanager,有一个大于70列的表 我在.java对象中使用了大约8列,包括id——不确定这是否重要 “我的Id”列包含以下内容: @Column(name = "pseudonym", nullable = false) @Basic(fetch = FetchType.EAGER) @Id 我的问题是: 如果我想使用xxxDAO.store(updatedRow)更新一行,我是否需要指定任何引用行ID的内容,或者我在这里缺少什么内容 我得到以下异常: DEBUG: org.sprin

有一个大于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)


澄清 我得到了上面的异常
不是一个有效的月份
。这是因为我试图更新一个Oracle表,该表的列定义为时间戳。我试图传递一个字符串值(即使字符串的结构基本相同)

在尝试调试时,我的问题是,我是否可以通过JPA DAO更新一行,而不必在Java对象中定义所有70+列。事实证明这是可能的,异常与没有定义列无关。 这个异常仅仅是因为我试图更新的时间戳没有正确的结构。我将字符串更改为日期对象,它们更新了

我的问题是:

如果我想使用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()
包含对要更新的行的引用


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


将日期作为字符串拉入只读状态是可以的。但是,如果希望将来通过合并更新此行,则字符串将不起作用。日期的值将重新传递(作为字符串),并引发异常(例如,不是有效的月份)。确保您的日期/时间戳存储为日期对象,而不是字符串,并可能将其存储在UI上。

对于
@ID
属性,您不需要
nullable=false
FetchType.EAGER
。而
TABLE
是一个关键字,如果您的ID列确实是这样命名的,您将不得不对其进行转义:
@column(name=“\”TABLE\”)
@TobiasLiefke-很抱歉混淆,这是该表的笔名。感谢其他提示当您询问异常时,请始终发布完整的异常stck跟踪,以及导致此异常的代码。是的,我理解JB Nizet,但我无法这样做;抱歉。我不明白,附加部分与原始问题有什么关系?你应该首先在文章中扩展模型和异常,否则有人会发现你的解决方案。@TobiasLiefke-这是我在试图解决原始问题时遇到的问题-也许如果谷歌对它进行索引;甚至允许一个人查找/查看信息-这是值得的,但你仍然没有解释,为什么会出现异常-我认为这可能是日期问题,这就是为什么我要求将该信息添加到原始问题中。哦,抱歉,是的,异常是由日期问题引起的。我现在将补充这些细节