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

如何使用自定义查询和Hibernate映射实体属性,hibernate,entity-relationship,Hibernate,Entity Relationship,我有EntityA和EntityB,它们是EntityA->EntityB中的一对一关系。我想将EntityB作为属性包含到EntityA中 我只想在众多实体中插入最后一个。是否有一种方法可以进行自定义查询以获取所需的实体 我尝试使用@Formula注释,我得到错误:子查询必须只返回一列,如果我的查询是从中选择ct…我得到错误:列entityA.ct不存在 @Data @Entity public class EntityA { private static final String

我有EntityA和EntityB,它们是EntityA->EntityB中的一对一关系。我想将EntityB作为属性包含到EntityA中

我只想在众多实体中插入最后一个。是否有一种方法可以进行自定义查询以获取所需的实体

我尝试使用@Formula注释,我得到
错误:子查询必须只返回一列
,如果我的查询是
从中选择ct…
我得到
错误:列entityA.ct不存在

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

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

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


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

是的,它正在工作!我认为我需要引用的不仅仅是id来获取完整的实体。谢谢