当前位置: 首页 > 知识库问答 >
问题:

当使用JPA语法时,具有复杂密钥类的JpaRepository验证失败,错误为"ValidationInforQuery for method"

戚升
2023-03-14

我试图使用JPA的“开箱即用”的好东西,并从数据库获取数据到对象。当JpaRepository使用一个简单的类作为键时,它是完美的,但是对于键类有点复杂的测试用例,即使是最简单的查询,jpa验证也会失败。

使用native_query=true可以解决这个问题,但是我不确定我做错了什么,遗漏了什么。

MyTestPK。爪哇:

package com.mytest.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Embeddable;
import html" target="_blank">java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Embeddable
public class MyTestPK implements Serializable {
    private String type;
    private String name;
}


MyTest.java:

package com.mytest.model;

import lombok.Data;

import javax.persistence.*;

@Entity
@Table(name = "my_test")

@Data
@IdClass(MyTestPK.class)
public class MyTest {
    @Id
    @Column(name = "my_test_type", nullable = false)
    private String type;

    @Id
    @Column(name = "my_test_name", nullable = false)
    private String name;

    @Column(name = "my_test_misc")
    private String misc;
}

MyTestRepository.java:

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

@Repository
public interface MyTestRepository extends JpaRepository<MyTest, MyTestPK> {
    @Query(value="SELECT m FROM MyTest m")
    List<MyTest> getAllObjs();
}

得到以下错误:......调用init方法失败;嵌套异常是java.lang.IllegalArgumentExc0019:验证失败的方法公共抽象java.util.列表com.mytest.dao.MyTestRepository.getAllObjs()!在org.springframework.beans.factory.annotation.autowiredAnnotationBeanPostProcator$autowiredFieldElement.inject(autowiredAnnotationBeanPostProcessor.java:586)~[sping-bean-5.0.9。发布. jar: 5.0.9。RELEASE]在org.springframework.beans.factory.annotation.注射etadata.inject(注射etadata.java:90)~[Spring-bean-5.0.9。发布. jar: 5.0.9。发布]

共有1个答案

曹旭东
2023-03-14

您可以使用@EmbeddedId,无需再次在实体类中定义列。

MyTestPK。爪哇:

package com.mytest.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Embeddable;
import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Embeddable
public class MyTestPK implements Serializable {
    @Column(name = "my_test_type", nullable = false)
    private String type;
    @Column(name = "my_test_name", nullable = false)
    private String name;
}

MyTest.java:

package com.mytest.model;

import lombok.Data;

import javax.persistence.*;

@Entity
@Table(name = "my_test")
@Data
public class MyTest {
    @EmbeddedId
    private MyTestPK pk;

    @Column(name = "my_test_misc")
    private String misc;
}
 类似资料:
  • 我正在尝试提交到我的存储库,但当我单击“发布分支”时,出现了一个错误,请帮助我,伙计们,我需要办公室工作的帮助,我是新来的。 点击这里查看图片

  • 我正在尝试创建一个JPaRepository,代码如下,带有一个select查询和insert查询, 存储库代码: 实体代码: 但是插入查询中不断出现以下错误, 单独使用select查询可以很好地工作,但是当我添加insert查询时,会出现错误。我想不出问题出在哪里。

  • 问题内容: 我的 詹金斯(Jenkins) 有问题,设置为“ git”,显示以下错误: 我已经用 ssh 测试过: 这是错误的: 我还使用“ SSH密钥”完成了这些步骤。 在詹金斯下登录 将您的github密钥复制到Jenkins .ssh文件夹 重命名键 但仍然无法在 jenkins中使用* git 仓库。 * 感谢帮助!。 问题答案: 更改为用户并手动运行命令: 首次通过SSH连接到新主机时,

  • 我对jenkins有一个问题,设置“Git”,显示以下错误: 我已经用ssh进行了测试: 这是错误: 谢谢你的帮助!。

  • 请注意:此问题与此问题不同,因此请不要将此问题标记为重复。 我搭建了一个web api代码,它使用Azure Active Directory通过Visual Studio 2019进行身份验证,并遵循此文档,通过使用我的Azure AD B2C租户的配置条目来配置基本的搭建应用程序。 服务配置方法类似于以下代码片段: 配置文件包含以下AzureAd配置项,其中我屏蔽了实际ID: 通过在Azure

  • 问题内容: 我具有对生产服务器的超级用户访问权限,我想在git中将最新版本部署到服务器,但是当我在要更新的文件夹上“ git pull”时遇到以下错误。 我浏览了一下,但是找不到明确的答案。 登台服务器在同一台计算机上运行,​​但是只是在不同的文件夹中,当我在该文件夹中时,一切正常。 我对Linux不太有经验,所以请提供有关如何修复的明确答案:-) 否则我可以使用任何我需要的东西 ps这在过去一直