当前位置: 首页 > 面试题库 >

在JpaRepository中使用@EmbeddedId

仉高昂
2023-03-14
问题内容

我有一个简单的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编写JPQLSELECT?

select distinct id.id from EntityClass where userId = :userId and (...)

第一个id引用(类型的)属性id,第二个引用的属性。EntityClass``EmbeddedIdClass``id``EmbeddedIdClass

另外,请确保中有一个userId属性EntityClass



 类似资料:
  • 这是我的代码: user.java UserController.java 结构: 提前谢谢

  • 我正在使用Spring Boot创建套接字服务器,并且在实现Runnable的类中初始化我的JpaRepository时遇到了麻烦。为了测试服务器,我使用netcat,服务器成功接收数据并创建新的线程来处理/解析数据。但是当通过JpaRepository将数据保存在数据库中时,我会得到NullPointerExcure,因为仓库尚未成功初始化。我在配置中错过了什么? 我的SpringBoot应用程

  • 我有一个新的SpringBoot应用程序来公开一些与jar中的实体相关的服务(作为一个依赖项包含在POM中)。对于数据访问,我计划使用SpringData,这样我就可以使用伟大的JpaRepository,而不是手动编写DAO。 jar在代码中是可见的,所以编译一切都很好,但是当Spring开始连接bean时,它会抛出异常: 在JAR中声明@Entity并使用SpringData/jpaEntit

  • 既然有一个,那么当使用时,有没有办法刷新更新的实体? 我试图按批处理更新实体。 真的会有很大的帮助! 非常感谢。

  • 我用嵌入ID(Integer和String字段在单独的类中)简单地初始化了类。我使用Spring数据(

  • 我已经读了这些问题,但没有一个有效: Spring boot MVC -无法自动连接服务类中的存储库 为什么不能@Autowired a JPA存储库-Spring boot JPA JpaRepository在服务类中获取Null 还有这个:https://www.baeldung.com/spring-autowired-field-null 不幸的是,它们都不起作用。 我拥有的是: 服务接口