我创建了两个实体,即Person和Message,表之间存在@ManyToMany关系。我正在使用Quarkus框架,它支持PanacheRepository和Postgres DB。我的要求是获取对应于一个人的所有消息,但我得到下面的错误:
java.lang.IllegalArgumentException:参数值[Person{...}]与预期类型[java.util.Collection(n/a)]不匹配
2023-05-12 11:19:21,285 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler](executor-thread-0)HTTP请求/persons/1/messages失败,错误ID:59165c88-d7d9-470b-99f4-8ca3509f2960-1:java.lang.IllegalArgumentException:参数值[Person{id=1,name ='abhishek',age=28}]与org.hibernate.query.spi.QueryParameterBindingValidator.validate(QueryParameterBindingValidator.java:54)处的预期类型[java.util.Collection(n/a)]不匹配
任何建议/意见都将是非常有益的。
这些实体是:
@Entity
public class Message {
@Id
@GeneratedValue
@Column(name = "message_id")
Long id;
@Column
String messageBody;
@JsonManagedReference
@ManyToMany
private List<Person> person;
..................
..................
}
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "person_id")
private Long id;
@Column(name="person_name")
private String name;
@Column
private int age;
@JsonBackReference
@ManyToMany(mappedBy = "person", fetch = FetchType.LAZY)
private List<Message> messageList;
.............................
.............................
}
存储库类:
@ApplicationScoped
public class MessageRepository implements PanacheRepository<Message> {
}
@ApplicationScoped
public class PersonRepository implements PanacheRepository<Person> {
}
资源类:
@Path("/persons")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class PersonResource {
@Inject
PersonRepository personRepository;
@Inject
MessageRepository messageRepository;
@GET
@Path("/{userId}/messages")
public Response listAllMessagesOfAUser(Long userId) {
Person person = personRepository.findById(userId);
List<Message> messagesList = messageRepository.find("person", person).list();
return Response.ok(messagesList).build();
}
.............................................
}
我首先使用userId获取person,并传递获得的person对象以获取与该person对应的消息列表。
1条答案
按热度按时间xxhby3vn1#
我能够解决这个问题,并使用以下查询获取用户的所有消息: