相关疑难解决方法(0)

Java EE 6 - 持久域对象模式 - 任何成功?

我有一个使用POJO的中等复杂的应用程序,现在将它迁移到EJB3.1,因此它可以在线部署,通过REST服务访问并从容器环境中受益(持久性是最重要的,但事务也很有用) .

自J2EE时代以来,我一直远离Java EE,并且正在努力解决实体bean的"损失"问题.我花了一段时间才意识到EJB3.1中的实体实际上并不是旧的意义上的Bean ... :)我已经阅读了许多EJB3书籍,包括O'Reilly Enterprise JavaBeans 3.1"手册",所有这些都解释了EJB3的概念和组件,但不是实现模式选项.

在我寻找Java EE 6模式的研究和调查中,我更倾向于采用Adam Bien的方法 - 特别是"持久域对象"(PDO)模式(在他的书中,但在此也进行了总结:http://download.java.net /general/podcasts/real_world_java_ee_patterns.pdf),它似乎与我目前的POJO应用程序提供最少的复杂性和最大的协同作用.PDO也与传统的面向对象的哲学和方法紧密结合,真正吸引我.

我没有重新讨论关于PDO的争论,而是有兴趣听听那些已经实施PDO的人以及在遇到困难时所做的工作.特别是我想知道你如何 JPA实体调用容器中的其他服务(比如调用无状态会话bean等).

我也想知道是否有PDO模式的替代方案允许我维护应用程序结构(使用多态等),而不必为我的模型中的每个类创建会话bean和JPA实体.(我不想这样做,部分是因为重构所有单元和集成测试所需的大量练习,部分是因为 - 据我所知 - 我最终会尝试复制我的1toMany等对象关系穿过我的会话bean也似乎很疯狂).

有没有人有任何经验可以分享 - 或者如果你想指出我是一个白痴,并且错过了Java EE 6中那些基本的"欢迎":)

TIA

design-patterns jpa java-ee-6 ejb-3.1

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

域对象是否与JPA实体相同?

域对象是否与JPA实体相同?如果我有一个值对象(例如美元账单),我怎么能(甚至应该)将它作为参考对象存储在数据存储区中?

域对象在某些情况下是实体的细微之处是什么?在其他情况下是值对象?谁能指导我写一篇好文章?

jpa domain-object

6
推荐指数
1
解决办法
2740
查看次数

苦苦挣扎,了解EntityManager的正确使用方法

我正在开始一个新项目,我对JPA/Hibernate的使用完全不熟悉.我正在尝试了解如何正确使用EntityManager.更准确地说,何时实例化它们,我需要多少,如果我关闭它们,我应该把所有东西都放到交易中吗?

无论如何,在我当前的代码中,我在尝试读取之前保存的实体时遇到了org.hibernate.LazyInitializationException.我会理解相反的事情(在事务中读取一个antity然后尝试在另一个事务中保存读取实体但是由于事务已经结束,实体是非托管的,因此保存失败),但这是我无法理解的.

我把我的代码放在GitHub上(https://github.com/GaetanLeu/intl),它只是几个类.我的主要是在src/sandbox/MessageSandbox.java中,它在第28行失败,带有以下stacktrace:

Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:164)
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:285)
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
    at entity.MessageKey_$$_jvstfcc_0.toString(MessageKey_$$_jvstfcc_0.java)
    at java.lang.String.valueOf(String.java:2854)
    at java.lang.StringBuilder.append(StringBuilder.java:128)
    at com.google.common.base.Present.toString(Present.java:88)
    at java.lang.String.valueOf(String.java:2854)
    at java.io.PrintStream.println(PrintStream.java:821)
    at sandbox.MessageSandbox.main(MessageSandbox.java:28)
Run Code Online (Sandbox Code Playgroud)

另外我收到来自Hibernate的警告说我的EntityManager已经存在,那么会发生什么?EntityManagerFactory.createEntityManager方法是否返回现有的方法?

WARN: HHH000436: Entity manager factory name (intl) is already registered.  If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name'
Run Code Online (Sandbox Code Playgroud)

真的,我迷失了什么时候创建EntityManagers ^^任何帮助将不胜感激,但请简单的解释我真的很新.

哦顺便说一下,我想确切地说我没有使用Spring,我没有EJB,我想现在手动操作EntityManagers直到我理解它为止.谢谢 :)

hibernate jpa entitymanager

6
推荐指数
1
解决办法
3314
查看次数