java Spring mvc,hibernate LazyInitializationException将实体转换为dto时出现异常
为什么我会犯这个错误?这是我打电话的部分
@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);
在我的服务impl中,我使用BeanUtils
将模型转换为dto
我做错了什么
# 1 楼答案
我的感觉是,当您试图使用
BeanUtils
将实体转换为dto时,实体已经被分离(例如,外部持久性上下文/休眠会话)。在Person
类中,有Set<Contact>
个延迟加载的联系人,这就是它失败的原因如果
Contact
不包含很多关系,您可能会更改为FetchType.EAGER
,或者您可以在Person
仍然附加的情况下转换实体