为什么我会收到此错误?这是我调用的 daoImpl 的一部分
@Transactional
@Repository
public class PersonDaoImpl implements PersonDao{
@Autowired
private SessionFactory sessionFactory;
@SuppressWarnings("unchecked")
@Override
@Transactional(readOnly=true)
public List<Person> getAllPersons(){
List<Person> persons = (List<Person>) sessionFactory.getCurrentSession()
.createCriteria(Person.class)
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
.list();
return persons;
}
我的人物模型的一部分
@OneToMany(fetch = FetchType.LAZY, mappedBy = "person", cascade = CascadeType.ALL)
private Set<Contact> contacts;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "PERSON_ROLE", joinColumns = {
@JoinColumn(name = "person_id", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "role_id",
nullable = false, updatable = false) })
private Set<Role> roles = new HashSet<Role>(0);
在我的服务实现中,我使用 BeanUtils 将模型转换为 dto 我做错了什么?
最佳答案
我的感觉是,当您尝试使用 BeanUtils
将实体转换为 dto 时该实体已经分离(例如,外部持久化上下文/hibernate session )。在你的Person
类你有一个 Set<Contact>
延迟加载的联系人 - 这就是它失败的原因。
如果Contact
不包含很多关系,您可以将其更改为 FetchType.EAGER
或者您可以在 Person
时转换实体仍然附加。
关于java - Spring mvc、hibernate将实体转换为dto时出现LazyInitializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36587528/