raj*_*har 5 postgresql hibernate
我在postgres中有一个表格,结构如下
CREATE TABLE rpaul."HK_LOGIN_DETAILS"
(
"HK_LOGIN_DETAILS_ID" bigint NOT NULL,
"HK_LOGIN_DETAILS_USERNAME" character varying(10) NOT NULL,
"HK_LOGIN_DETAILS_PASSWORD" character varying(50) NOT NULL,
CONSTRAINT "HK_LOGIN_DETAILS_PK" PRIMARY KEY ("HK_LOGIN_DETAILS_ID" ),
CONSTRAINT "HK_LOGIN_DETAILS_UK" UNIQUE ("HK_LOGIN_DETAILS_USERNAME" )
)
Run Code Online (Sandbox Code Playgroud)
此表的hibernate映射如下所述
<hibernate-mapping package="net.rpaul.projects.homekeeping.domain.login">
<class name="LoginDetails" table="`HK_LOGIN_DETAILS`">
<id name="id" column="`HK_LOGIN_DETAILS_ID`" type="long">
<generator class="assigned" />
</id>
<property name="userName" type="string" column="`HK_LOGIN_DETAILS_USERNAME`" not-null="true" />
<property name="password" type="string" column="`HK_LOGIN_DETAILS_PASSWORD`" not-null="true" />
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
在LoginDetails.java中,我将id字段声明为long,userName和password字段声明为String.还是当我尝试执行以下操作时
List list = getHibernateTemplate().find("from LoginDetails ld where ld.userName = ?", userName);
Run Code Online (Sandbox Code Playgroud)
我明白了
错误:运算符不存在:字符变化= bytea
我没有得到出错的地方.任何帮助,将不胜感激.
cha*_*los 12
我认为您应该检查您的变量"userName"是否为空.在这样的情况下我经历过这个消息.
这个问题很老了,但如果有人需要的话,仍然分享我在 Spring Boot 中使用的解决方案。
您可以使用以下 WHERE 条件来处理 NULL 值或使参数在 Postgres 查询中可选。
SELECT * FROM table
WHERE
(?1 is null OR column1 = cast(?1 AS text))
AND
(?2 is null OR column2 = cast(?2 AS text))
Run Code Online (Sandbox Code Playgroud)
如果column1 和column2 作为NULL 传递,则整个WHERE 条件将为TRUE。如果column1和column2不为NULL,则查询中将考虑column1和column2。
?1 为空或列 1 = ?1 :将检查传递的值是否为 null,然后整个 where 条件将为 true(如果为 null,则不会检查第二个条件 [column1 = null] - PG 优化)
cast(?1 AS text) :如果由于某种原因值作为 bytea 传递,则可能很有用。如果传递的值是真正的 null,如果不进行强制转换,它仍然会给出“charactervaryingbytea”错误。
似乎 Hibernate 出于某种原因将类型参数作为 bytea(或者更确切地说,可能是 java.sql.Types.BLOB)发送,而不是将其留给服务器来推断或将其设置为文本 (java.sql.Types.细绳)。这是与参数上的解决方案JPA lower() 函数类似的问题
归档时间: |
|
查看次数: |
17888 次 |
最近记录: |