小编Ern*_*est的帖子

Hibernate挂起或抛出延迟初始化没有会话或会话关闭

我正在增强一个旧的Spring/Hibernate应用程序并且卡住了.我有一个方法,读取3000多行的文件,每行有一个记录,必须与数据库上的东西进行比较,然后必须将一个寄存器添加到数据库(多对多表).

表和关系是

分公司很多产品,产品分布在很多分公司.

产品很多产品,而且一个类别很多产品

还有更多的桌子在那里工作正常.

我创建的表/对象是Branch,Product,BranchToProduct.

产品有一组BranchToProduct对象,它们有3个字段

我需要将BranchToProduct对象添加到Product集合中,从我从文件的每一行获得的信息填充3个字段.

我添加一个简单的行,应用程序抛出:

product = productDAO.findByModel(stringModel);

未能懒惰地初始化角色集合:com.bamboo.catW3.domain.Product.products,没有会话或会话被关闭

如果我去hibernate映射(hbm文件)并设置关系product_to_products lazy = false,该行单独运行,但如果我尝试将它放在文件循环中,应用程序将始终挂起正在处理的第18行,不会无论我使用哪个文件或内容的顺序,控制台都停止工作,必须关闭java查杀进程.

无论哪种方式,在调试中,我得到了很多HQL用于简单的查找,13行HQL,直到我在lazy = true时得到我的错误,并且当我使用lazy = false并将其放在循环上时有很多行.

我想我应该尝试用lazy = true解决问题.

这种情况让我想知道:

1.-当懒惰=真.为什么我不能运行此命令的这一行的单行,但它在该类的其他方法上工作正常?

顺便说一下,这是一个名为CatalogFacade的类,它实现了其他clasess的方法:(CategoryFacade,ContainerFacade,ProductFacade,ProductOptionFacade,ProductStatusFacade,UserFacade,EmailFacade,FileFacade,BranchOfficeFacade)

这是
productDao.find()的代码:

public Product find(Integer id) throws DataAccessException {

        Product product= (Product) super.find(Product.class, id);


        if(product!=null){
            product.setProductAttributes(new TreeSet<ProductAttribute>(product.getProductAttributes()));

            for (Product ptp : product.getProducts()){
               ptp.setProductAttributes(new TreeSet<ProductAttribute>(ptp.getProductAttributes()));

             }

         } 
Run Code Online (Sandbox Code Playgroud)

在这一行中抛出了异常,最后是:

pptp.setProductAttributes(new TreeSet<ProductAttribute>(ptp.getProductAttributes()))  
Run Code Online (Sandbox Code Playgroud)

在Intelij的调试器中,我可以看到查询错误地形成的对象:

product.getProducts()= {org.hibernate.collection.PersistentSet@4312}无法评估表达式方法抛出'org.hibernate.LazyInitializationException'异常.

其他属性怎么样都没问题.该产品甚至没有数据库中的其他产品.

UPDATE …

spring hibernate

13
推荐指数
2
解决办法
4万
查看次数

java.net.SocketException:太多打开文件Spring Hibernate Tomcat

我在一些客户端的Linode服务器上有一个Hibernate,Spring,Debian,Tomcat,MySql堆栈.它是一个Spring-Multitenant应用程序,可为大约30个客户端托管网页.

应用程序启动正常,过了一会儿,我得到这个错误:

java.net.SocketException: Too many open files
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
at java.net.ServerSocket.implAccept(ServerSocket.java:453)
at java.net.ServerSocket.accept(ServerSocket.java:421)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:216)
at java.lang.Thread.run(Thread.java:662)
Run Code Online (Sandbox Code Playgroud)

然而,在抛出此错误之前,nagios警告我ping服务器停止响应.

以前,我有nginx作为代理,并且每个请求都得到这个nginx错误,并且不得不重新启动tomcat:

2014/04/21 12:31:28 [error] 2259#0: *2441630 no live upstreams while connecting to upstream, client: 66.249.64.115, server: abril, request: "GET /catalog.do?op=requestPage&selectedPage=-195&category=2&offSet=-197&page=-193&searchBox= HTTP/1.1", upstream: "http://appcluster/catalog.do?op=requestPage&selectedPage=-195&category=2&offSet=-197&page=-193&searchBox=", host: "www.anabocafe.com"
2014/04/21 12:31:40 [error] 2259#0: *2441641 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 200.74.195.61, server: abril, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8080/", host: "www.oli-med.com"
Run Code Online (Sandbox Code Playgroud)

这是我的server.xml连接器配置:

<Connector …
Run Code Online (Sandbox Code Playgroud)

java spring tomcat hibernate nginx

7
推荐指数
1
解决办法
1万
查看次数

为什么Broadleaf Commerce超过Magento或ZenCart?

我有一个用java-spring-hibernate制作的网站,我们从头开始创建自己,它显示了产品目录,我有它的逻辑.我还可以使用我们在flex中制作的管理员来管理内容和产品/类别.我们可能不应该遇到麻烦,因为那里有很多cms,但是它做了什么.该站点使用jstl呈现在html中以flex格式管理的内容.

现在我想添加一个电子商务,因为我们必须将所有付款,发货,订单逻辑添加到管理员和前端(购物车/用户).但是,因为已经有像magento商店这样的东西,我想也许我应该切换并留下我漂亮的应用程序死:/.正如我正在研究的那样,我偶然发现了阔叶商业,这是一种以弹性 - 弹簧 - 冬眠制成的电子商务后端.它相对较新,应该有一个积极的开发团队.所以我想我的问题是,为什么?如果有这么多的开源商务解决方案,他们是否会在开发中做出这样的努力?我的意思是你仍然需要为用户方构建GUI.他们与magento的区别是什么,职业选手是什么?我应该尝试与broadleaf整合吗?什么是组合,然后保持我喜爱的旧应用程序?

java magento e-commerce broadleaf-commerce

2
推荐指数
1
解决办法
2万
查看次数