gpt4 book ai didi

java - Postgres/hibernate 运算符不存在 : text = bytea

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:27 25 4
gpt4 key购买 nike

我是 hibernate 世界的新手,在尝试使用 hibernate 和 postgres 执行查询时收到以下错误消息。

org.postgresql.util.PSQLException: ERROR: operator does not exist: text = bytea
Hint: No operator matches the given name and argument type(s). You might
need to add explicit type casts.

这是我的 hibernate 映射 (car.hbm.xml):

<hibernate-mapping>
<class name="Car" table="car"
schema="someSchema">
<id name="id" type="int" column="car_id">
<generator class="sequence">
<param name="sequence">car_seq</param>
</generator>
</id>
<property name="carMake">
<column name="car_make" sql-type="string"/>
</property>
<property name="carModel">
<column name="car_model" sql-type="string"/>
</property>
<property name="carVin" >
<column name="car_vin" sql-type="int" />
</property>
<property name="datePurchased">
<column name="date_purchased" sql-type="date"/>
</property>
<property name="retiredModel">
<column name="retired_model" sql-type="boolean"/>
</property>
</class>

在 Postgres 上,这是我的表的样子:

CREATE TABLE car (
car_vin INTEGER NOT NULL DEFAULT nextval('car_seq'::regclass) PRIMARY KEY,
car_make TEXT NOT NULL,
car_model TEXT DEFAULT NULL,
date_purchased DATE DEFAULT now() NOT NULL,
retired_model BOOLEAN DEFAULT FALSE NOT NULL
);

这是我的模型类 (Car.java):

public class Car {
private int id;
private String carMake;
private String carModel;
private int carVin;
private Date datePurchased;
private boolean retiredModel;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getCarModel() {
return carModel;
}

public void setcarModel(String carModel) {
this.carModel = carModel;
}

public String getcarMake() {
return carMake;
}

public void setcarMake(String carMake) {
this.carMake = carMake;
}

public Date getDatePurchased() {
return datePurchased;
}

public void setDatePurchased(Date datePurchased) {
this.datePurchased = datePurchased;
}

public boolean isRetired() {
return retiredModel;
}

public void setRetired(boolean retiredModel) {
this.retiredModel = retiredModel;
}

在我的 DAO 层中,我使用以下行来查询:

Query query = getSession().createQuery("from Car as c where " +
"c.carModel = ? AND c.carMake = ?").setParameter(0, carModel).setParameter(1, carMake);

carMake 和 carModel 都是 String 数据类型,在 DAO 方法中作为方法参数传递。

请注意,我的 hbm 中的字符串映射到 postgres 中的 TEXT,所以我猜测这是否是问题所在。如果是,我该如何解决?

最佳答案

这很奇怪,但查询不能很好地处理 null。当我将查询更改为:

Query query = getSession().createQuery("from Car as c where " +
"c.carModel = ? AND c.carMake is null").setParameter(0, carModel);

它工作正常,因为 DAO 需要将 make 查询为 NULL。因此,如果它不为 null,我需要有两组查询,一组硬编码为如上所述选择 null,另一组为 setParam(1, carMake)。

很奇怪,但我认为这可行。

关于java - Postgres/hibernate 运算符不存在 : text = bytea,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33927108/

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