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

Spring数据jpa-参数值[Book]与预期类型[ContentType]不匹配

公羊学义
2023-03-14

我有两个简单的表,contentcontentType

@Entity
@Table(name = "content")
public class Content implements Serializable {

public Content() {}

public Content(String title, String description) {
    this.title = title;
    this.description = description;
}

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;

@ManyToOne
private ContentCategory contentCategory;

@ManyToOne
private ContentType contentType;

 // getter/setters
}

@Entity
@Table(name = "contentType")
public class ContentType implements Serializable {

public ContentType() {}

public ContentType(String contentType) {
    this.contentType = contentType;
}

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;

@NotNull
private String contentType;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "contentType")
private Set<Content> content;
`// getter/setters` }

每个内容都有一个类型,但是许多类型可能存在于许多内容中

我将检索类型Book的内容

这里是我的仓库”

public interface ContentRepository extends JpaRepository<Content, Long> {

    Iterable<Content> findByContentType(String contentType);
}

这是我的测试方法:

@Test
public void retrieve_content_based_on_type() {

    // create and insert a sample content type, i.e. a Book

    ContentType contentType1 = new ContentType("Book");
    contentTypeRepository.save(contentType1);

    //create and insert two contents corresponding to this type
    Content cont1 = new Content("t1", "d1");
    cont1.setContentType(contentType1);
    contentRepository.save(cont1);

    Content cont2 = new Content("t2", "d2");
    cont2.setContentType(contentType1);
    contentRepository.save(cont2);


    //retrieve all contents which their type is Book

    Iterable<Content> allBooks = contentRepository.findByContentType("Book");
    for (Content eachBook : allBooks) {
        System.out.println(eachBook);
    }
}

我得到了这个例外:

org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [Book] did not match expected type [com.aa.bb.domain.ContentType (n/a)]; 

nested exception is java.lang.IllegalArgumentException: Parameter value [Book] did not match expected type [com.aa.bb.domain.ContentType (n/a)]

共有1个答案

彭礼骞
2023-03-14

您可以将当前方法修改为:

@Query("select c from Content c where c.contentType.contentType = :contentType")
Iterable<Content> findByContentType(String contentType);

原因:Content实体中的contentType类型为contentType,而contentType实体中的contentType类型为String

在不使用查询注释的Spring Data JPA方面,以下是解决方案:

Iterable<Content> findByContentTypeContentType(String contentType);

Spring数据参考链接

上述方法适用于存储库类ContentRepository。

 类似资料:
  • 我在请求服务线路时收到此错误: 错误:组织。springframework。道。InvalidDataAccessApiUsageException:参数值[5]与预期类型[nz.webshop.models.Customer.Customers(不适用)]不匹配;嵌套的异常是java。lang.IllegalArgumentException:参数值[5]与预期类型[nz.webshop.mod

  • 它打印出值的等效,这是因为这一行: 通过调用表示。 那么,如何使Hibernate相信是的实例? 我的枚举是由加载的。而由URLClassLoader加载,由另一个类加载器加载。

  • 我使用的是JPA2.0,在DAO层中有以下代码: 注意:这是从泛型例程中提取和简化的代码,我不能将“Object ValueArr”更改为String[],因为它被用于其他...

  • 当我想跑的时候: 我得到: 执行操作“MappingAddAction”的服务异常,java.lang.IllegalArgumentException:参数值[5118]与预期的类型[com.vernuso.trust.server.domain.ClientImport.MappingInfo(N/A)]不匹配 有人能帮助我理解为什么它需要类型而不是类型吗? 我有两个表,如下图所示。Mappi

  • 我已经回答了这个问题,但没有得到任何反馈。因此,我将尝试提出不同的问题。我想对我的搜索请求使用规范。但似乎无法访问规范或其他内容,因为它告诉我: 这个:带有@...似乎不对。 我只是试着遵循这个Spring官方教程:https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/ 或者来自

  • 我做错了什么? 正在更新: 我发现了问题所在。问题与ActionRepository中找到的函数有关。函数的签名首先要求两个日期进行比较,然后id和我给出了相反的值。我很清楚,在我上了它之后,我会有一个问题的日期,所以答案确实帮助了我。谢谢大家!