web-dev-qa-db-ja.com

ブール条件でJPAクエリを記述する方法

私のプロジェクトでは、eclipselinkを実装したJPA 2.0を使用していますが、次の問題があります。

私はブール列でエンティティを定義しました:

@Entity
public User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="USR_ID")
    private Short id;

    @Column(name="USR_NAME")
    private String name;

    @Column(name="USR_ACTIVE")
    private boolean active;

    .......

}

次のような、すべてのアクティブユーザーを返すクエリを作成します。

ユーザーuからuを選択します。ここでu.active = TRUE;

しかし、そのクエリを使用すると、ブール値をShortにキャストできないという例外が発生しました(データベースの列はsmallintとして格納されています)。このクエリを記述する正しい方法はありますか?

ありがとう

20
Rado Skrib

次のフォームを使用します。

SELECT e FROM Employee e WHERE e.active = TRUE

詳細は the docs を参照してください:

17
YUIOP QWERT
SELECT e FROM  Employee e WHERE e.active = TRUE

上記のクエリで、ユーザーパラメータとしてTRUE/FALSEを渡す方法は?以下を試すと、ユーザー入力(TRUE/FALSE)に従って値が返されません。

これが名前付きクエリです

        SELECT e FROM  Employee e WHERE e.active = :inputValue

ここで私は上記の名前クエリを呼び出します

Query getEmployeesByState= entityManager.createNamedQuery("above query name");
   getEmployeesByState.setParameter("active", Boolean.FALSE);
1
user2555212

私もこの問題を抱えており(PostgreSQL + Eclipselink)、@TypeConverterおよび@Convertアノテーション。

@Entity
@TypeConverter(name = "booleanToInteger", dataType = Integer.class)
public User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="USR_ID")
    private Short id;

    @Column(name="USR_NAME")
    private String name;

    @Column(name="USR_ACTIVE")
    @Convert("booleanToInteger")
    private boolean active;

    .......
}
1
lazlev

次のようなクエリを記述できます。

@Query( "ユーザーからuを選択u u.activeで注文");

最初に非アクティブなユーザーが表示されます。あなたがアクティブユーザーを最初に見たい場合:

@Query( "ユーザーuからSELECT u u.active descで注文");

0
Rahul Chauhan

MySqlの場合、これは機能します。

public interface UserRepository extends JpaRepository<User, Long> {    
    @Query("SELECT e FROM  Employee e WHERE e.active=?1")
    User findByStatus(Boolean active);
}
0
Kirill_code

それは私のscenerioで機能しています:findByTitleAndDocumentIdAndIsDeleted(String title、UUID docId、Boolean isDeleted);

0

JPAプロバイダーおよびMySQLデータベースとしてEclipseLinkを使用しています。この構成では、真の場合は1、偽の場合は0を使用します。

0
punkyduck

@TypeConverter(dataType = Integer.class)を使用できます

0
James