-1

I am trying to get the orders by using the getOrders(String domain) function from domain DAO this is the code:

Set<Order> orders;
orders = domainService.getOrders('google.com');

but I keep getting this error

failed to lazily initialize a collection of role: com.latinon.reportator.model.Domain.ordersDomain, could not initialize proxy - no Session

which one is the correct way to set the lazy type without getting the error

pojos

domain

@Entity
@Table(name="Domain")
public class Domain {

    private Set<Order> ordersDomain = new HashSet<Order>(0);
    private Set<User> userDomain = new HashSet<User>(0);

    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name="Order_Domain", joinColumns={
            @JoinColumn(name="Order_Domain_Domain_id")
    },inverseJoinColumns={
            @JoinColumn(name="Order_Domain_Order_id", nullable=false,updatable=false)
    })
    public Set<Order> getOrdersDomain() {
        return ordersDomain;
    }
    public void setOrdersDomain(Set<Order> ordersDomain) {
        this.ordersDomain = ordersDomain;
    }
}

order

@Entity
@Table(name="Order")
public class Order {

    private Set<Domain> orderDomains = new HashSet<Domain>(0); 

    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name="Order_Domain", joinColumns={
            @JoinColumn(name="Order_Domain_Order_id",nullable=false,updatable=false)
    }, inverseJoinColumns={
            @JoinColumn(name="Order_Domain_Domain_id",nullable=false,updatable=false)
    })
    public Set<Domain> getOrderDomains() {
        return orderDomains;
    }
    public Set<Domain> getOrderDomains() {
        return orderDomains;
    }
}

DAOs

Domain

public interface DomainDAO {
    public void saveDomain(Domain domain);
    public void updateDomain(Domain domain);
    public Domain getDomainById(Integer id);
    public Domain getDomain(String domain);
    public void deleteDomain(Integer id);
    public Set<Order> getOrders(String domain);
}

Order

public interface OrderDAO {
    public void saveOrder(Order order);
    public void updateOrder(Order order);
    public Order getOrderById(Integer id);
    public void deleteOrder(Integer id);
    public Order getOrderByAdUnit(String adUnitId);
}

servicios

domain

public interface DomainService {
    public void saveDomain(Domain domain);
    public void updateDomain(Domain domain);
    public Domain getDomainById(Integer id);
    public void deleteDomain(Integer id);
    public Domain getDomain(String domain);
    public Set<Order> getOrders(String domain);
} 

domain service implementation

@Service
public class DomainServiceImpl implements DomainService {
    private DomainDAO domainDao;
    public DomainDAO getDomainDao() {
        return domainDao;
    }
    public void setDomainDao(DomainDAO domainDao) {
        this.domainDao = domainDao;
    }

    public DomainServiceImpl() {
        // TODO Auto-generated constructor stub
    }
    @Transactional
    public Set<Order> getOrders(String domain) {
        Domain domainAux = this.domainDao.getDomain(domain);
        return domainAux.getOrdersDomain();
    }
}

order

public interface OrderService {
    public void saveOrder(Order order);
    public void updateOrder(Order order);
    public Order getOrderById(Integer id);
    public void deleteOrder(Integer id);
    public Order getOrderByAdUnit(String adUnitId);
}

order service implementation

@Service
public class OrderServiceImpl implements OrderService {

    private OrderDAO orderDAO;

    public OrderDAO getOrderDAO() {
        return orderDAO;
    }
    public void setOrderDAO(OrderDAO orderDAO) {
        this.orderDAO = orderDAO;
    }

    public OrderServiceImpl() {
        // TODO Auto-generated constructor stub
    }
    @Transactional
    public Order getOrderByAdUnit(String adUnitId) {
        return this.orderDAO.getOrderByAdUnit(adUnitId);
    }
}
0

1 Answer 1

1

In Hibernate if something is lazily loaded, it should be loaded while a session is available. After session is closed, it can't be loaded (lazy init exception)

Inside DomainServiceImpl.getDomain method say something like:

Hibernate.initialize(domainAux.getOrdersDomain())

If your DAO's are your session boundaries, do above in respective DAO methods.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.