在JpaRepository中使用@EmbeddedId
我有一个简单的Entitly类,@EmbeddedId
(Integer
和String
单独类中的字段)。然后,我使用Spring
Data(org.springframework.data.jpa.repository.JpaRepository
)访问数据库(MySql),使用常规ID,查询可以正常工作,无论是Spring生成的查询还是我自己编写的查询。与EmbeddedId
我没有设法创建正确的查询。我想做的是选择所有id(发生某些情况的EmbeddedId字段之一),这里有一些代码示例,也许有人会知道如何解决它。
实体类:
@Entity@Table(name="table_name")
public class EntityClass {
@EmbeddedId
private EmbeddedIdClass id;
private String someField;
//rest of implemetation
}
EmbeddedId类:
@Embeddablepublic 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的方法,我尝试了许多不同的方法名称,但是我总是从方法解析器中获取异常。
回答:
看来您的查询正在使用列名。它应包含属性名称,包括导航到嵌入式对象。SO上还有一个相关的问题:如何使用嵌入式ID编写JPQL
SELECT?
select distinct id.id from EntityClass where userId = :userId and (...)
第一个id
引用(类型的)属性id
,第二个引用的属性。EntityClass``EmbeddedIdClass``id``EmbeddedIdClass
另外,请确保中有一个userId
属性EntityClass
。
以上是 在JpaRepository中使用@EmbeddedId 的全部内容, 来源链接: utcz.com/qa/414198.html