我正在使用@Modifying 和@Query 注释直接执行我的sql 语句,但是我得到一个错误,告诉我我的表没有映射,所以我不知道我做错了什么,这是我的代码:@Repositorypublic interface TypesContratDaoJPA extends CrudRepository<Type, Long> { @Query("select type_id from declaration_type where declaration_id=:declaration") List<Integer> getListTypes(@Param("declaration") int declaration); @Modifying @Query("insert into declaration_type values(:declaration,:type)") void addTypeToContrat(@Param("declaration") int declaration, @Param("type") int type); @Modifying @Query("delete from declaration_type where declaration_id=:declaration and type_id=:type")void deleteTypeFromContrat(@Param("declaration") int declaration, @Param("type") int type);}我收到此错误:Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: declaration_type is not mapped [delete from declaration_type where declaration_id=:declaration and type_id=:type]at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:133)at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:157)at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:164)at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:670)at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23)...... ... ...任何帮助将非常感激。
1 回答
BIG阳
TA贡献1859条经验 获得超6个赞
看起来您想要执行本机查询而不是 JPQL 查询。
为了将查询标记为本机,您应该将其添加为注释nativeQuery = true
上的属性。@Query
例如,您的第一个查询应如下所示:
@Query("select type_id from declaration_type where declaration_id=:declaration", nativeQuery = true) List<Integer> getListTypes(@Param("declaration") int declaration);
如果您不添加nativeQuery = true
查询注释,则该查询被视为 JPQL 查询。
因此,为了使您的第一个查询工作,您将必须有一个名为的类,该类declaration_type
用 注释@Entity
并且具有名为declaration_id
and的字段type_id
。您应该查看一些 JPQL 教程(或文档)以了解有关这些类型查询的更多信息。
添加回答
举报
0/150
提交
取消