17

次の構造のポストグルにテーブルがあります

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" )
)

そして、このテーブルの休止状態のマッピングは以下のとおりです

<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>

LoginDetails.java で、id フィールドを long、userName および password フィールドを String として宣言しました。それでも次のことを実行しようとすると

List list =  getHibernateTemplate().find("from LoginDetails ld where ld.userName = ?", userName);

私は得る

エラー: 演算子が存在しません: 文字が異なります = bytea

何がうまくいかなかったのかわかりません。どんな助けでも大歓迎です。

4

5 に答える 5

20

変数「userName」がnullでないことを確認する必要があると思います。そのような場合にこのメッセージを経験しました。

于 2012-06-12T21:24:36.920 に答える
4

質問は古いですが、必要に応じて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))

ここで、column1 と column2 が NULL として渡されると、WHERE 条件全体が TRUE になります。column1 と column2 は、NULL でない場合、クエリで考慮されます。

?1 is null OR column1 = ?1 :渡された値が null であるかどうかをチェックし、次に全体の where 条件が true になります (null の場合は 2 番目の条件 [column1 = null] をチェックしません - PG 最適化)

cast(?1 AS text) :何らかの理由で値がバイトとして渡される場合に役立ちます。渡された値が実際の null の場合でも、キャストされていないと、「文字が変化する bytea」エラーが発生します。

于 2020-11-03T11:59:51.947 に答える