Java HHH-2772(hibernate querydsl)的解决方案

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

我正在尝试执行一个查询,以根据汽车的foo属性查找汽车。属性存储在不同的表中

我有两节课

@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 
  ...