Java EJB实体:更新单个列的最佳方式

Java EJB实体:更新单个列的最佳方式,java,ejb,Java,Ejb,使用EJB实体,我需要更新100+列表中单行的一列。我通常读取/加载该行并进行必要的更新,但这似乎是压倒性的,因为所有剩余的列都将被不必要地更新,更不用说性能损失了。 有没有一种方法可以像传统的JDBC方法一样只更新单个列?您可以执行更新查询: update Foo f set f.someField = :someValue where f.id = :id 但是请注意,如果实体已经加载,则此更改不会反映在实体中,并且它将绕过乐观锁定。 确保不要过早优化。如果简单地修改实体足够快,那么就这么

使用EJB实体,我需要更新100+列表中单行的一列。我通常读取/加载该行并进行必要的更新,但这似乎是压倒性的,因为所有剩余的列都将被不必要地更新,更不用说性能损失了。
有没有一种方法可以像传统的JDBC方法一样只更新单个列?

您可以执行更新查询:

update Foo f set f.someField = :someValue where f.id = :id
但是请注意,如果实体已经加载,则此更改不会反映在实体中,并且它将绕过乐观锁定。 确保不要过早优化。如果简单地修改实体足够快,那么就这么做


我宁愿担心拥有一个拥有100多个字段的实体。也许您应该将其拆分为几个实体。

使用JPA,首先您可以查询需要更新的记录实体,并修改该实体的属性。然后调用EntityManager来更新该实体。因此,您只需更新一条需要更新的记录。

谢谢您的回答。当你说如果实体已经加载,那么这个更改不会反映在实体中,这意味着如果实体已经加载,我执行了一个查找,那么我更新的字段将具有旧值?因此,方法似乎是执行查找,然后更新实体,而不是运行updatedirectlyno,正好相反。如果您这样做,您将有一个加载的实体,其中将包含一个过时的值。然而,如果您先更新,然后从数据库中获取实体,您将在实体中获取更新后的值。我不需要先加载实体来执行更新吗?我首先找到实体,然后更改任何属性,然后合并,这没有任何意义。您的问题是:如何在不更新实体的所有字段的情况下更新单个列。我的回答是,您可以使用更新查询,而不是加载实体并修改它。然后你说你要做的是加载实体并更新它,导致所有字段都被更新。如果那是你打算做的,你为什么要问这个问题?