@EmbeddedId
(Integer
とString
別のクラスのフィールド)を持つ単純なEntitlyクラスがあります。そして、Spring Data(org.springframework.data.jpa.repository.JpaRepository
)を使用してデータベース(MySql)にアクセスします。通常のIDでは、Springによって生成されたものと、自分で作成したものの両方で、クエリは正常に機能しています。私はEmbeddedId
正しいクエリを作成することができませんでした。私がやりたいのは、すべてのID(何らかの条件が発生するembeddedIdのフィールドの1つ)を選択することです。ここにいくつかのコードサンプルがあり、誰かがそれを解決する方法を知っているかもしれません。
エンティティクラス:
@Entity
@Table(name="table_name")
public class EntityClass {
@EmbeddedId
private EmbeddedIdClass id;
private String someField;
//rest of implemetation
}
EmbeddedIdクラス:
@Embeddable
public class EmbeddedIdClass implements Serializable {
public EmbeddedIdClass(Long id, String language) {
super();
this.id = id;
this.language = language;
}
public UserAdTextId() {}
@Column(name="ad_id", nullable=false)
private Integer id;
@Column(name="language_code", nullable=false)
private String language;
//rest of implemetation
}
およびリポジトリ:
@Transactional(readOnly=true)
public interface MyRepository extends JpaRepository<EntityClass, EmbeddedIdClass> {
@Query("select distinct ad_id from EntityClass where userId = :userId and (/*here the conditions*/)")
public Page<Integer> findUserAdsWithSearchString(@Param("userId") Integer userId, @Param("searchString") String searchString, Pageable page);
//rest of implemetation
}
@EmbeddedIdをサポートするためのメソッドを作成する方法についてのドキュメントは見つかりませんでした。さまざまなメソッド名を試していましたが、メソッドパーサーから常に例外が発生します。