我很好奇HQL如何在实体实例之间断言相等。
我们说我有一个名为Person的实体
@Entity
public class Person{
@Id
private Long id;
private String name;
}
和部门
@Entity
public class Department {
@Id
private Long id;
@ManyToOne
private Person person;
}
如果我做以下陈述,那就没关系了:
Query query = getSession().createQuery("from Department d where d.person = ?");
query.setProperty(0,new Person(1L));
但是,如果我有一个嵌入式实体并且没有定义pk怎么办?像
@Embeddable
public class Adress {
private String email;
private String street;
private Long identifier;
}
@Entity
public class Person{
@Id
private Long id;
private String name;
@Embedded
private Address address;
}
会有任何办法,所以我可以告诉JPA让它工作:
Query query = getSession().createQuery("from Person p where p.address = ?");
query.setProperty(0,new Address(1L));
即使它不完全是主键吗? 当然,如果我尝试了p.adress.identifier,然后只传递了Long值,我知道我会工作,但重点是,我可以告诉JPA提供商它将如何实现这一目标。实施'平等我的方式? 谢谢大家
答案 0 :(得分:0)
不,它不受支持,一般来说很难或者在某些情况下没有意义,比如Embeddable中有集合。
如果您发现经常需要这样做,请考虑将此类嵌入式转换为custom user types。然后,您可以按照描述的方式进行比较。