gpt4 book ai didi

java - spring-data-jpa 存储库在查询中使用 Collection 作为 @Param

转载 作者:行者123 更新时间:2023-12-04 18:00:10 25 4
gpt4 key购买 nike

我在通过使用 spring 数据 jpa 存储库执行自定义查询时遇到问题。

@Query annitated 方法不指定 List<> 类型的参数。

这是实体类:

@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 指定值,尽管第二个参数具有有效值

最佳答案

   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);
}`

关于java - spring-data-jpa 存储库在查询中使用 Collection 作为 @Param,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36605532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com