Java HHH-2772(hibernate querydsl)的解决方案
我正在尝试执行一个查询,以根据汽车的foo属性查找汽车。属性存储在不同的表中 我有两节课Java HHH-2772(hibernate querydsl)的解决方案,java,hibernate,one-to-many,querydsl,hibernate-onetomany,Java,Hibernate,One To Many,Querydsl,Hibernate Onetomany,我正在尝试执行一个查询,以根据汽车的foo属性查找汽车。属性存储在不同的表中 我有两节课 @Embeddable @Table(name = "PROPERTY") public class Property { @Column(name = "type", nullable = false) private String type; @Column(name = "string_value", nullable = true) private String stringVa
@Embeddable
@Table(name = "PROPERTY")
public class Property {
@Column(name = "type", nullable = false)
private String type;
@Column(name = "string_value", nullable = true)
private String stringValue;
...
}
@Entity
@Table(name = "CAR")
public class Car {
@Id
...
private String id;
@ElementCollection(fetch = FetchType.EAGER)
@Fetch(FetchMode.SUBSELECT)
@CollectionTable(name = "PROPERTY", joinColumns = @JoinColumn(name = "car_ID") )
private Set<Property> properties = new HashSet<Property>();
...
}
结果HQL:
select
car
from
com....Car car
left join
car.properties as foo with foo.type = :a1
where
...
这不起作用,因为:
在此之前,可以编写HQL:从猫的左侧选择猫将cat.kittens作为小猫加入小猫。所有者=:owner
现在HQL引发了一个异常:
org.hibernate.hql.ast.invalidWithClauseeException:with子句只能引用驱动表中的列
解决方法是显式使用主键(ownerId):
从cat左侧选择cat将cat.kittens作为小猫与kitten.owner.ownerId=:ownerId
问题是我没有ownerId或owner,因为它是一个元素集合 如果我将元素集合转换为@oneToMany@manyToOne,则该属性将不再是可嵌入的,并且需要id。这不是一个选项。(我无法定义复合ID(这是一项要求),我不想添加新列) 你推荐什么?
是否可以将汽车或汽车Id作为字段添加到可存储类中?
我可以用其他方式创建标准吗?
我对任何不需要更改数据库的解决方案都感兴趣。(休眠更改或确定)
谢谢构建您自己的hibernate版本,该版本不会引发该异常或尝试更新您的hibernate版本。
select
car
from
com....Car car
left join
car.properties as foo with foo.type = :a1
where
...