因此,使用JPA / Hibernate,你当然可以加载一个实体" proxy"无需使用session.load()
或entityManager.getReference()
等内容访问数据库。
但是,似乎无法在这些代理商上设置属性"没有Hibernate从数据库初始化代理。因此,您无法在没有选择的情况下仅保留更改后的值(通过@DynamicUpdate
实体)。
我相信这就是它的方式,如果你想要update without select
,你必须自己滚动它。如果有人能证明我错了,我会很高兴的!我错过了什么吗?
答案 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。
我从来不需要实现这种东西,但是我想您可以尝试一下...
希望这对您有帮助
欢呼
Nikao