有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    我的感觉是,当您试图使用BeanUtils将实体转换为dto时,实体已经被分离(例如,外部持久性上下文/休眠会话)。在Person类中,有Set<Contact>个延迟加载的联系人,这就是它失败的原因

    如果Contact不包含很多关系,您可能会更改为FetchType.EAGER,或者您可以在Person仍然附加的情况下转换实体