java是否在HQL查询中使用getter/setter?
我想直接使用带有HQL
sql语句的包装getter/setter来使用@Embedded
字段
但它不起作用:
org.hibernate.QueryException: could not resolve property: address.zip of: Customer [SELECT c FROM Customer c WHERE c.address.zip :=zip]
以下是可能的吗
@Embeddable
pulic class ZipCode {
String country;
String zip;
}
@Embeddable
public class Address {
String street;
String town;
@Embedded
ZipCode zipCode;
public String getZip() {
return zipCode().getZip();
}
public void setZip(String zip) {
zipCode.setZip(zip);
}
}
@Entity
public class Customer {
@Embedded
Address address;
}
String FIND_BY_ZIP = "SELECT c FROM Customer c WHERE c.address.zip :=zip";
# 1 楼答案
您可以将访问类型更改为AccessType.PROPERTY
这样就有可能做到
默认情况下,如果在字段中放置映射注释,则属性的访问类型为AccessType.FIELD(例如,在
zipCode
中有@Embedded
)为了覆盖此默认行为,可以使用
AccessType.PROPERTY
显式标记属性,或者将@Embedded
映射注释移动到getZipCode()
方法