【问题标题】:Create a Hibernate Entity that is not associated with a table创建一个不与表关联的 Hibernate Entity
【发布时间】:2013-09-16 23:36:02
【问题描述】:

我正在尝试创建一个实体,它的字段不是特定于表而是特定于查询。例如:

@Entity
class MyEntity{
    @column("bookTitle ")
    private String bookTitle;

    @Column("rating ")
    private Double rating;

    @Column("sum")
    private Integer sum;
}

这些字段不是任何表的列,但我想要: SELECT o1.bookName AS bookTitle, o2.rate AS rating, o3.totalNumber AS sum...

entityManager.createQuery(my above query, MyEntity.class) 应该按预期返回一个 MyEntity 类型的类

不幸的是,Hibernate 抱怨“找不到列”。 在 EclipseLink 或 Toplink 中它工作正常。此外,在我看来,实体不应与特定表关联,而应包含一组随机收集的列。

有什么想法吗?

【问题讨论】:

    标签: hibernate jpa


    【解决方案1】:

    您无法使用 Hibernate/JPA 将选择映射到 @Entity,但您可以这样做:

    public class MyEntity{
    
        private String bookTitle;
        private Double rating;
        private Integer sum;
    
        public MyEntity(String bookTitle, Double rating, Integer sum) {
             this.bookTitle = bookTitle;
             this.sum = rating;
             this.sum = sum;
        }
    }
    

    然后你使用以下 HQL :

    select new package.MyEntity(o1.bookName, o2.rate, o3.totalNumber) from something where
    

    另一种解决方案是创建一个视图并将@Entity 映射到该视图。

    【讨论】:

    • 顺便说一句,只要您的查询“选择”它们,就可以在休眠实体中声明不驻留在任何表上的新列。换句话说,只有当您映射实体字段并且您的选择不包含此字段时,hibernate才会抱怨
    猜你喜欢
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 2013-01-10
    • 1970-01-01
    • 2016-08-04
    相关资源
    最近更新 更多