使用Hibernate有条件地映射字段

时间:2019-03-18 22:53:01

标签: hibernate one-to-many

我有一个Food对象,该对象与其他Food对象(通过字段ingredients)具有一对多关系,并且大多数时候我想加载{ {1}}和父对象ingredients。但是,当我加载Food对象时,先加载其Food,然后再加载其ingredients,然后再加载其ingredients,这是恶心的。有什么方法可以防止Hibernate递归地加载ingredients而只是加载ingredients对象的基本信息(例如Foodid)?

食物

type

成分

@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;
    .
    .
    .

1 个答案:

答案 0 :(得分:0)

可以加载收藏集

  1. 通过热切获取@OneToMany(fetch = FetchType.EAGER)。如果未指定获取属性,则默认获取类型为LAZY。在您的情况下,提取类型不是导致这种情况的原因。
  2. 通过访问会话内部的配料集合,hibernate将使用DB中的select来初始化/加载它。迭代收集或调用food.getIngredients().size()food.getIngredients().isEmpty()或其他方法时,可能会发生这种情况。

我假设某些代码正在访问集合,这是导致它的原因。