使用Hibernate有条件地映射字段

问题描述 投票:0回答:1

我有一个Food对象,与其他Food对象(通过字段ingredients)有一对多的关系,大多数时候我想用父ingredients对象加载Food。然而,当我加载一个Food对象,它的ingredients负载,然后他们的ingredients负载,然后他们的ingredients负载,令人作呕。有没有办法防止Hibernate递归加载ingredients而只是加载Food对象的基本信息(如idtype)?

餐饮

@Entity
@Table(name="Foods")
public class Food { 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="Id")
    private int id;

    @Column(name="Name")
    private String name;

    @Column(name="Description")
    private String description;

    @OneToMany(mappedBy="food")
    private List<Ingredient> ingredients;
    .
    .
    .

成分

@Entity
@Table(name="Ingredients")
public class Ingredient implements Serializable {       
    @Id
    @ManyToOne
    @JoinColumn(name="FoodId")
    private Food food;

    @Id
    @ManyToOne
    @JoinColumn(name="IngredientId")
    private Food ingredient;

    @Column(name="Amount")
    private int amount;
    .
    .
    .
hibernate one-to-many
1个回答
0
投票

可以完成收集的加载

  1. 通过热切地获取@OneToMany(fetch = FetchType.EAGER)。如果没有指定fetch属性,则默认获取类型为LAZY。在你的情况下,获取类型不会导致它。
  2. 通过访问会话中的成分集合,hibernate将使用select from DB初始化/加载它。迭代收集或调用food.getIngredients().size()food.getIngredients().isEmpty()或其他方法时会发生这种情况。

我假设一些代码正在访问集合,这是导致它。

© www.soinside.com 2019 - 2024. All rights reserved.