- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
新年快乐:)
我有一个使用 Hibernate 和 DataJPA 的 Spring MVC 项目。
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id", nullable = false)
private User user;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "restaurant_id", nullable = false)
@NotNull
private Restaurant restaurant;
正如您所看到的,这里有两个带有急切获取的字段。我想让两者都变得懒惰。我需要使用我在此处所做的 @NamedEntityGraph
注释:
@NamedQueries({
@NamedQuery(name = Restaurant.GET_BY_ID, query = "SELECT r FROM Restaurant r WHERE r.id=?1"),
})
@Entity
@NamedEntityGraph(name = Restaurant.GRAPH_WITH_MENU_HISTORY, attributeNodes = {@NamedAttributeNode("menuHistory")})
@Table(name = "restaurants")
public class Restaurant extends NamedEntity {
@OneToMany(cascade = CascadeType.REMOVE, fetch = FetchType.LAZY, mappedBy = "restaurant")
@OrderBy(value = "date DESC")
private List<Dish> menuHistory;
public static final String GRAPH_WITH_MENU_HISTORY = "Restaurant.withMenuHistory";
我想知道,我是否会写
@NamedEntityGraph(name = "G_NAME", attributeNodes = {@NamedAttributeNode("user", "restaurant")})
如果我请求其中一个,第二个是否会加载,或者仅根据他的请求加载?可能是,我需要使用两个图表?
最佳答案
根据 JPA 2.1 规范 3.7.4:
The persistence provider is permitted to fetch additional entity state beyond that specified by a fetch graph or load graph. It is required, however, that the persistence provider fetch all state specified by the fetch or load graph.
实际上,@NamedEntityGraph
只是保证哪些字段应该立即加载,但不能保证哪些字段不应该加载。
因此,如果您使用 user
创建 @NamedEntityGraph
,则您的持久性提供程序(例如 Hibernate)只能加载 user
字段或两者user
和 restaurant
领域热切。这取决于实现并且不能保证。
参见this hibernate的问题。
但据我所知,Hibernate 只加载除 @NamedEntityGraph
中指定的简单字段,而不加载惰性关联。
所以如果你使用hibernate,它应该可以工作。
但是,您当然需要两个单独的 @NamedEntityGraph
用于 user
和 restaurant
字段。
或者您可以使用ad-hoc spring-data-jpa
的功能:
@Repository
public interface GroupRepository extends CrudRepository<GroupInfo, String> {
@EntityGraph(attributePaths = { "members" })
GroupInfo getByGroupName(String name);
}
使用此代码,您不再需要显式声明@NamedEntityGraph
。您可以只指定内联字段。
关于java - Spring DataJPA 中的延迟初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41420688/
新年快乐:) 我有一个使用 Hibernate 和 DataJPA 的 Spring MVC 项目。 @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(n
当我尝试将 Spring Data JPA 和 Spring Data MongoDB 与 SpringBoot 一起使用时,它假设我的 Mongo 实体也是 JPA 实体并抛出错误。 我有 Pers
我是一名优秀的程序员,十分优秀!