假设我的应用程序中有以下实体:
@Data
@Entity
public class SomeEntity {
@Id
private Long id;
@OneToMany
private List<AnotherEntity> anotherEntities = new ArrayList<>();
@Version
private Long version;
}
@Data
@Entity
public class AnotherEntity {
@Id
private Long id;
@Column
private String someField;
@Column
private Long version;
}
问题1:
例如,我想加载一个id = 1的SomeEntity,但我只想部分加载另一个实体,例如,我只想加载它的最后10个版本,用一个请求完成此操作(使用Hibernate/Spring Data JPA)的最简单和最直接的方法是什么?
问题2:
我想更新前面提到的对象并添加一个新的AnotherEntity到列表中,但是JpaRepository的保存(T t)方法保存了整个对象,我丢失了没有加载的对象。我如何保存对象,以便Spring Data(乐观锁定)更新版本,并且SomeEntity不会丢失以前的数据?
更新1:
我正在使用Postgresql的数据库。
1条答案
按热度按时间thigvfpy1#
根据您的确切约束,您有不同的选项。
您可以使用
@Where
注解:您可以使用过滤器:
您可以在使用会话运行查询之前启用筛选器:
您可以将关联Map为双向(或多对一)
现在您可以使用HQL查询来获取实体列表:
当你想创建一个新的
AnotherEntity
时,你可以从结果列表中的任何元素中获取SomeEntity
,或者你可以使用EntityManager#getReference
(并且避免运行查询):关联是惰性的,因此Hibernate不会加载整个集合(除非您需要访问它)。