【问题标题】:What is the use of @OrderColumn with the Hibernate@LazyCollection annotation?@OrderColumn 与 Hibernate@LazyCollection 注解有什么用?
【发布时间】:2022-02-03 15:24:50
【问题描述】:
@Entity(name = "Department")
public static class Department {

    @Id
    private Long id;

    @OneToMany(mappedBy = "department", cascade = CascadeType.ALL)
    @OrderColumn(name = "order_id")
    @LazyCollection( LazyCollectionOption.EXTRA )
    private List<Employee> employees = new ArrayList<>();

    //Getters and setters omitted for brevity

}

那么这里@OrderColumn(name = "order_id") 有什么用?

那么这里@OrderColumn(name = "order_id") 有什么用?

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    @LazyCollection(LazyCollectionOption.EXTRA) 将在访问时加载列表的单个条目,而不是在首次访问任何元素时加载整个集合(就像普通 JPA 延迟加载那样)。

    @OrderColumn 会将子实体的(从 0 开始的)位置存储在父列表中,例如Hibernate 可以像这样查询列表的第三个元素:

    // Hibernate logs:
    /* load org.demo.extralazy.ElChild */ select
        elchild0_.id as id1_7_0_,
        elchild0_.my_value as my_value2_7_0_, // <-- just some child attribute
        elchild0_.parent_id as parent_i3_7_0_ 
    from
        el_child elchild0_ 
    where
        elchild0_.parent_id=123 // <-- just some parent-id
        and elchild0_.el_child_order_column=2 // <-- 0-based element index
    

    然后可以像这样查询集合的大小:

    // Hibernate logs: 
    select
        max(el_child_order_column) + 1 // <-- (0-based index)
    from
        el_child 
    where
        parent_id = 123
    

    https://vladmihalcea.com/hibernate-extra-lazy-collections/

    【讨论】:

      猜你喜欢
      • 2012-10-07
      • 2011-02-26
      • 1970-01-01
      • 2015-01-15
      • 2010-11-24
      • 1970-01-01
      • 2017-09-16
      • 2012-12-06
      • 1970-01-01
      相关资源
      最近更新 更多