繁体   English   中英

如何使用Hibernate或JPA动态生成实体集合?

[英]How can i generate dynamically collections of entities with hibernate or jpa?

我有以下两个JPA休眠实体,

@Entity
public class Product {

    @Id
    @GeneratedValue(generator = "uuid")
    @GenericGenerator(name="uuid", strategy="uuid2")
    private String id;

    @ManyToOne
    private Type type;

    @ManyToOne
    private Attribute attribute;
}

@Entity
public class ProductFamily {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(generator = "uuid")
    @GenericGenerator(name="uuid", strategy="uuid2")
    private String id;

    @ManyToMany
    @Formula("("
            + " SELECT t.id "
            + " FROM Type t "
            + " WHERE t.id IN ( "
            + "     SELECT p.type_id "
            + "     FROM product p"
            + "     WHERE p.family_id = id"
            + "     ) "
            + " order by t.value asc "
            + " )")
    private Set<Type> types;

    @ManyToMany()
    @Formula("("
            + " SELECT a.id "
            + " FROM Attribute a "
            + " WHERE a.id IN ( "
            + "     SELECT p.attribute_id "
            + "     FROM product p"
            + "     WHERE p.family_id = id"
            + "     ) "
            + " order by a.value asc "
            + " )")
    private Set<Attribute> attributes;

    @OneToMany(mappedBy="family")
    @LazyCollection(LazyCollectionOption.FALSE)
    private Set<Product> products;

}

我试图将产品系列中的类型和属性字段生成为该系列产品的类型和属性的集合。 (请注意,类型和属性类本身就是实体)

下面的公式是不允许的,因为我得到以下

Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1225)
... 51 more
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: ProductFamily, for columns: [org.hibernate.mapping.Formula( ( SELECT t.id  FROM Type t  WHERE t.id IN (   SELECT p.type_id    FROM product p      WHERE p.family_id = id  )  ) )]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:336)
... 56 more

这似乎表明将公式的结果映射到一组实体存在问题

配方有可能吗? 如果是这样怎么办?

如果没有,是否有标准的方法来做这种事情? 如果不是,您会推荐什么做为更好的方法。

最后,我会尽可能地选择jpa,但在查看公式时,我愿意使用休眠特定的解决方案

5年前,但对于今天阅读此书的人来说:

@Formula附近,您应该添加: @ElementCollection(targetClass = X.class)其中X是集合对象的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM