是"更新没有选择"可以使用Hibernate / JPA吗?

时间:2017-08-19 21:06:52

标签: java sql hibernate jpa

因此,使用JPA / Hibernate,你当然可以加载一个实体" proxy"无需使用session.load()entityManager.getReference()等内容访问数据库。

但是,似乎无法在这些代理商上设置属性"没有Hibernate从数据库初始化代理。因此,您无法在没有选择的情况下仅保留更改后的值(通过@DynamicUpdate实体)。

我相信这就是它的方式,如果你想要update without select,你必须自己滚动它。如果有人能证明我错了,我会很高兴的!我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

恐怕您是正确的,如@DynamicUpdate的java-doc中所写: “注意,要重新连接分离的实体,必须先启用select-before-update,这是不可能的。”

nicolasl给出的答案在这种情况下是不正确的,如果您希望控制使用CrudRepository.save()时是触发持久性还是合并性,则需要实现可持久性

答案 1 :(得分:0)

AFAIK选择是由合并操作执行的,其唯一目的是检查实体是否已存在于数据库中。如果正确的话,您可以按照他们在其文档中所说的那样实施自己的验证:

  

实现Persistable:如果实体实现Persistable,则Spring   数据JPA将新检测委托给该对象的isNew(…)方法   实体。有关详细信息,请参见JavaDoc。

     

实施EntityInformation:您可以自定义   SimpleJpaRepository中使用的EntityInformation抽象   通过创建JpaRepositoryFactory和   相应地重写getEntityInformation(…)方法。然后是你   必须将JpaRepositoryFactory的自定义实现注册为   春豆。请注意,这几乎没有必要。见   有关详细信息,请参见JavaDoc。

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.entity-persistence.saving-entites

我从来不需要实现这种东西,但是我想您可以尝试一下...

希望这对您有帮助

欢呼

Nikao