Java 尝试获取resultset时出现延迟类型异常
我试图通过使用域DAO中的getOrders(字符串域)函数来获取订单 代码如下:Java 尝试获取resultset时出现延迟类型异常,java,spring,hibernate,Java,Spring,Hibernate,我试图通过使用域DAO中的getOrders(字符串域)函数来获取订单 代码如下: Set<Order> orders; orders = domainService.getOrders('google.com'); 服务 领域 @Entity @Table(name="Domain") public class Domain { private Set<Order> ordersDomain = new HashSet<Order>(0);
Set<Order> orders;
orders = domainService.getOrders('google.com');
服务
领域
@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;
}
}
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);
}
订单服务实现
@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();
}
}
@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);
}
}
在Hibernate中,如果延迟加载某个内容,则应在会话可用时加载该内容。会话关闭后,无法加载它(lazy init异常) 在DomainServiceImpl.getDomain方法中,可以这样说:
Hibernate.initialize(domainAux.getOrdersDomain())
如果您的DAO是您的会话边界,请在各自的DAO方法中执行上述操作
@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();
}
}
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);
}
@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);
}
}
Hibernate.initialize(domainAux.getOrdersDomain())