【发布时间】:2019-12-04 07:29:53
【问题描述】:
我正在尝试使用 Quarkus 构建一个简单的应用程序。目前,我有两个实体类,它们是一对多相关的:
@Entity
public class Person extends PanacheEntity {
public String name;
public LocalDate birthdate;
@OneToMany(mappedBy = "person")
public List<Address> addresses;
public static Person findByNameFirst(String name) {
return find("name", name).firstResult();
}
}
@Entity
public class Address extends PanacheEntity {
public String street;
...etc...
@ManyToOne
public Person person;
}
这些被一个简单的 REST web 服务使用,它应该将一个人存储到数据库中,再次选择它并返回它:
@GET
@Path("storePerson")
@Produces(MediaType.APPLICATION_JSON)
@Transactional
public Person storePerson(
@QueryParam("name")String name,
@QueryParam("birthdate")String birthdate)
{
LocalDate birth = LocalDate.parse(birthdate, DateTimeFormatter.BASIC_ISO_DATE);
Person person = new Person(name, birth);
person.persistAndFlush();
Person p2 = Person.findByNameFirst(name);
return p2;
}
第一次调用 web 服务时,结果是一个带有存储数据的 JSON 对象,这与预期的一样。再次调用时,会抛出内部服务器错误:
org.hibernate.LazyInitializationException: Unable to perform requested lazy initialization [Person.addresses] - no session and settings disallow loading outside the Session
据我了解,之所以会引发错误,是因为事务只持续到 storePerson 方法结束,但到 JSON 的转换发生在方法之外。
如何防止此错误?我已阅读有关休眠参数“enable_lazy_load_no_trans”的信息,但 Quakus 的 application.properties 似乎不支持它。
【问题讨论】:
标签: json hibernate resteasy jsonb quarkus