私のプロジェクトでは、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として格納されています)。このクエリを記述する正しい方法はありますか?
ありがとう
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);
私もこの問題を抱えており(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;
.......
}
次のようなクエリを記述できます。
@Query( "ユーザーからuを選択u u.activeで注文");
最初に非アクティブなユーザーが表示されます。あなたがアクティブユーザーを最初に見たい場合:
@Query( "ユーザーuからSELECT u u.active descで注文");
MySqlの場合、これは機能します。
public interface UserRepository extends JpaRepository<User, Long> {
@Query("SELECT e FROM Employee e WHERE e.active=?1")
User findByStatus(Boolean active);
}
それは私のscenerioで機能しています:findByTitleAndDocumentIdAndIsDeleted(String title、UUID docId、Boolean isDeleted);
JPAプロバイダーおよびMySQLデータベースとしてEclipseLinkを使用しています。この構成では、真の場合は1、偽の場合は0を使用します。
@TypeConverter(dataType = Integer.class)を使用できます