调用会话bean方法从客户端
传递方法参数时遇到问题应用程序,数据到达方法调用始终为null或设置为默认值。
虽然该方法的过程适用于对象
例如:
- 我们有持久化对象实体addStudent(学生)的方法; - 从客户端我们创建学生对象设置学生字段,如学生姓名等,调用方法addStudent(ourStudent); 这个ourStudent到达方法,其字段为null或默认值。学生加入了 这些空地。
提前致谢。
答案 0 :(得分:6)
您正在使用EclipseLink进行编织,但它不起作用。你应该尝试不编织。
可能是通过编辑您的persistence.xml
(s)
<persistence-unit name="XXX" transaction-type="XXX">
<jta-data-source>XXX</jta-data-source>
<jar-file>Or List of Classes or something else</jar-file>
<properties>
[other properties]
<property name="eclipselink.weaving" value="false"/>
</properties>
</persistence-unit>
更新: JPA实现可以使用几种替代方法来处理实体,这是一个无用的列表:
EclipseLink调用字节代码注入“Weaving”(What is Java bytecode injection?) 动态编织在“运行时”进行编织 - 基本上是在类加载器加载类时。 静态编织在部署之前进行编织,但是在编译之后。 对于EclipseLink,编织是性能最快的方法,它也是出于其他原因的首选方法。不幸的是,编织工作通常有点棘手。完全有可能这对你的项目来说都不重要,它不适用于很多典型的项目。
如果有客户端通过远程接口访问bean,并且有实体作为参数传递或通过该连接返回值,则动态编织将不起作用。 在大多数生产场景中,特别是如果应用程序/产品不是很小,静态编织优先于动态编织... 要阅读有关静态与动态编织以及如何配置它的更多信息,我还没有找到任何优秀的资源,但这个至少是半官方的: Using_EclipseLink_JPA_Weaving
发生在你身上的是,实体是在一端编织而不是在另一端编织 - &gt;绝对不行。
好消息是,您可能根本不需要关心任何这种编织物,或者您可能。 当您禁用编织时,EclipseLink回退到另一种处理JPA实体的方法。 如果启用编织,EclipseLink仅支持一些函数(尽管不需要JPA)。
来自:What_You_May_Need_to_Know_About_Weaving_JPA_Entities 列出了EclipseLink明确使用的东西:
(对于其中一些方法,如果禁用编织,其他方法会有后备,我猜除了“内部优化”之外的其他方法)