在JpaRepository中使用@EmbeddedId

我有一个简单的Entitly类,@EmbeddedIdIntegerString单独类中的字段)。然后,我使用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类:

@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的方法,我尝试了许多不同的方法名称,但是我总是从方法解析器中获取异常。

回答:

看来您的查询正在使用列名。它应包含属性名称,包括导航到嵌入式对象。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

回到顶部