在HQL(Hibernate Query Language)中,WHERE
子句用于过滤查询结果。在HQL中,可以使用对象类型作为条件,但需要注意以下几点:
@Entity
注解标记。@Column
注解标记,以便在数据库中进行映射。以下是一个示例,假设有一个实体类Person
,其中包含一个Address
对象类型的属性:
@Entity
public class Person {
@Id
private int id;
@Column
private String name;
@Embedded
private Address address;
// getters and setters
}
@Embeddable
public class Address {
@Column
private String street;
@Column
private String city;
// getters and setters
}
在这个例子中,Person
实体类包含一个Address
对象类型的属性。要在HQL查询中使用Address
对象类型,可以像下面这样编写查询:
String hql = "FROM Person p WHERE p.address.city = :city";
Query query = session.createQuery(hql);
query.setParameter("city", "New York");
List<Person> persons = query.list();
在这个查询中,WHERE
子句使用了p.address.city
来过滤Person
实体类的结果。其中,p
是Person
实体类的别名,address
是Person
实体类中的属性名称,city
是Address
对象类型中的属性名称。
需要注意的是,在HQL查询中,对象类型的属性名称需要使用实体类中定义的属性名称,而不是数据库表中的列名。此外,如果对象类型的属性是一个集合,例如List<String>
,则需要使用elements()
函数来进行查询,例如:
String hql = "FROM Person p WHERE elements(p.nicknames) = :nickname";
Query query = session.createQuery(hql);
query.setParameter("nickname", "Johnny");
List<Person> persons = query.list();
在这个查询中,elements()
函数用于将Person
实体类中的nicknames
属性转换为一个元素集合,然后使用=
运算符进行过滤。其中,p
是Person
实体类的别名,nicknames
是Person
实体类中的属性名称。
领取专属 10元无门槛券
手把手带您无忧上云