我在通过使用spring data jpa存储库执行自定义查询时遇到了一个问题。
@Query Annited方法没有指定列表<>类型的parametr。
以下是实体类:
@Entity
@Table(name = "\"user\"")
public class User {
@Id
@GeneratedValue(generator = "increment")
private long id;
@Column(unique = true, nullable = false)
private String mail;
@ManyToMany(targetEntity = Interest.class, mappedBy = "users")
private List<Interest> interests = new ArrayList<Interest>();
...
... setters and getters.
@Entity
@Table(name = "interest")
public class Interest {
@Id
@Column(name = "interest_name", nullable = false, unique = true)
private String name;
@ManyToMany(targetEntity = User.class, fetch = FetchType.LAZY)
private List<User> users = new ArrayList<User>();
...
... setters and getters.
以下是查询:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select distinct u from User u where u <> :currentUser and
u.interests in :currentInterests")
List<User> getUsersWithSameInterests(@Param("currentUser") User user,
@Param("currentInterests") List<Interest> interests);
}
我用这个像:
@Autowired
private UserRepository userRepository;
@Override
public List<User> getUsersWithSameInterests(User user) {
return userRepository.getUsersWithSameInterests(user, user.getInterests());
}
但是得到了
org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
.
.
.
Caused by: java.sql.SQLException: No value specified for parameter 2
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2205)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2185)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2115)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1936)
at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:83)
at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:83)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:70)
... 73 more
没有为参数2指定值,尽管第2个参数具有有效值
Change the code as per below:
Old Code:
`@Repository
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select distinct u from User u where u <> :currentUser and
u.interests in :currentInterests")
List<User> getUsersWithSameInterests(@Param("currentUser") User user,
@Param("currentInterests") List<Interest> interests);
}`
Updated Code:
`@Repository
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select distinct u from User u where u.user :currentUser
and u.interests in :currentInterests")
List<User> getUsersWithSameInterests(@Param("currentUser") User user,
@Param("currentInterests") List<Interest> interests);
}`
我想在中编写一个类似的查询,但它没有返回任何内容: -它不起作用。 一样完美。 以下是我的代码:
问题内容: 我有许多需要保留到数据库的简单对象类型。我正在使用Spring JPA来管理这种持久性。对于每种对象类型,我需要构建以下内容: 在我看来,有可能用三个基于泛型的类替换每种对象类型的多个类,从而节省了大量的样板代码。我不确定该怎么做,实际上,如果这是个好主意? 问题答案: 首先,我知道我们在这里提高了一些标准,但这已经比没有Spring Data JPA的帮助而编写的代码少得多。 其次,
问题内容: 我正在使用Spring Data JPA(以Hibernate作为我的JPA提供程序),并且想定义一个附加了HQL查询的方法: 当我运行此查询时,我得到一个。 如何使HQL查询看起来有效?我知道我可以简单地返回Long值,然后在Java代码中检查if ,但是这种解决方法不是必需的,对吧? 问题答案: 我认为您可以简单地更改查询以将布尔值返回为 PS:如果您要检查是否存在基于主键值的已有
目前我一直在使用以下Spring JPA存储库自定义查询, 我需要修改这个查询时,筛选文本将是逗号分隔的值。但按照以下方式,它将是一个动态查询,我如何执行它。 我需要构建动态查询,
我在我的Web应用程序中使用spring data jpa,我有实体用户 postgresql中的表
我正在构建一个使用Spring data jpa特性的Spring-boot应用程序。 请在我的dao层代码下面找到 我正在使用一个DaoProvider类,如下所示: 我的spring boot主类定义如下: 现在,在运行时,我得到以下异常: