当前位置: 首页 > 知识库问答 >
问题:

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

殳越
2023-03-14

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

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

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

共有1个答案

董元徽
2023-03-14

错误消息给出了解释。公式只能返回一列。

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

 类似资料:
  • 问题内容: 有人可以向我展示如何在Hibernate中编写以下SQL并正确获取结果的示例吗? 如果可能的话,我想做的就是将结果放入自己的基类中: 我相信在JPA(使用)中是可能的,但是我还没有弄清楚如何在Hibernate(使用和)中做到这一点。 我试图更好地学习Hibernate,即使这个“简单”查询也令人困惑,无法知道Hibernate以哪种形式返回结果,以及如何将结果映射到我自己的(基)类中

  • 问题内容: 考虑表 这是使用查询生成的视图 我想为总销售额创建一个实体,但没有sql端的视图。 该实体将通过查询构造。我发现的最接近的东西是 this ,但是我无法使其工作。 即使我定义了加载器,hibernate也会查找实体表并在找不到时给出错误。如果我创建表,它不会从我定义的命名查询中加载实体,Hibernate会生成查询本身。 有没有一种方法可以使@Loader工作,或者有另一种我可以将查询

  • 我有一个实体,它有一个Map ElementCollection字段。我知道使用Jpa,您可以在类级别上使用@Index注释为常规字段定义索引。问题是我的地图元素集合字段创建了一个不是由@Entity注释类创建的连接表。所以我不能使用@Index注释。有没有Jpa/Hibernate方法来定义这个连接表中字段的索引,或者我必须手动定义它们?这是地图字段。 谢谢

  • 问题内容: 我将MySQL列声明为 JSON 类型,并且在使用Jpa / Hibernate映射时遇到问题。我在后端使用Spring Boot。 这是我的代码的一小部分: 该程序返回一个错误,并告诉我无法映射该列。 在mysql表中,该列定义为: json_value JSON NOT NULL; 问题答案: 我更喜欢这样: 创建从Map到String的转换器(属性转换器),反之亦然。 使用Map

  • 我在Kotlin-vertx项目中配置了Hibernate,我设法设置了所有内容,但当我运行HQL查询时,它会输出: 提前谢了。

  • 我对这些技术是新的,所以提前道歉。 我在我的应用程序中使用了springboot、Spring JPA、hibernate和mapstruct。