gpt4 book ai didi

java - 在 HQL 查询中使用 getter/setter?

转载 作者:行者123 更新时间:2023-11-30 07:03:07 25 4
gpt4 key购买 nike

我想通过 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";

最佳答案

您可以将访问类型更改为 AccessType.PROPERTY

@Embeddable
public class Address {
String street;
String town;

@Embedded
@Access(AccessType.PROPERTY)
ZipCode zipCode;

public String getZipCode() {
return zipCode().getZip();
}

public void setZipCode(String zip) {
zipCode.setZip(zip);
}
}

然后就可以做

String FIND_BY_ZIP = "SELECT c FROM Customer c WHERE c.address.zipCode :=zip";

默认情况下,属性的访问类型是AccessType.FIELD如果您将映射注释放在该字段中(例如,您的 zipCode 中有 @Embedded)。

为了覆盖此默认行为,您可以使用 AccessType.PROPERTY 显式标记您的属性,或者将您的 @Embedded 映射注释移动到 getZipCode() 方法。

关于java - 在 HQL 查询中使用 getter/setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28624828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com