如何使用自定义查询和Hibernate映射实体属性

时间:2019-08-16 16:10:56

标签: hibernate entity-relationship

我有EntityA和EntityB,它们与EntityA-> EntityB具有OneToMany关系。我想将EntityB作为属性包含在EntityA中。

我只想插入许多实体中的最后一个。我可以通过自定义查询来获取所需的实体吗?

我尝试从该post使用@Formula批注,得到ERROR: subquery must return only one column,并且,如果我的查询是select ct from ...我得到ERROR: column entityA.ct does not exist

@Data
@Entity
public class EntityA {

    private static final String QUERY = 
        "(SELECT b.* FROM entity_b_table b
          WHERE b.entity_a_id = id 
          ORDER BY b.created_at DESC 
          LIMIT 1)"

    @Id
    @GeneratedValue
    private UUID id;
    private String firstName;
    @Column(updatable = false)
    private LocalDateTime createdAt;

    // What is the best way to achive this?
    @ManyToOne
    @JoinColumnsOrFormulas({
        @JoinColumnOrFormula(formula = @JoinFormula(value = QUERY, referencedColumnName = "id")),
    })
    private EntityB entityB;
}

@Data
@Entity
public class EntityB {
    @Id
    @GeneratedValue
    private UUID id;
    private String lastName;
    @Column(updatable = false)
    private LocalDateTime createdAt;

    private UUID entityAId;
}

另一个解决方法是在方法中获取并设置该属性,但我的目标是在实体类中找到解决方案。有人有主意吗?谢谢

1 个答案:

答案 0 :(得分:1)

错误消息为您提供了解释。公式只能返回一个列。

您必须将b.*更改为b.id