ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-与休眠的Struts2 xwork类型转换

2019-12-08 21:01:27  阅读:213  来源: 互联网

标签:hibernate type-conversion struts2 crud java


在Struts2应用程序中转换类型的最佳方法是什么?

现在,我想为我的应用程序中的某个休眠实体创建CRUD.假设我想更改与用户关联的帐户.只要我具有所有适当的获取器/设置器,我就可以传递带有特定值的参数user.account.id.

第一次创建对象(帐户为空)时,这可以很好地工作.这使ognl创建了一个新的帐户对象,并将ID设置为传入的对象.

尝试更改封装的Account对象时,会发生此问题.使用相同的user.account.id参数,ognl将此解释为getUser().getAccount().setId(param). Hibernate将此解释为尝试更改主键.

我知道为什么会这样做,我只是想知道是否有更好的方法来处理这种情况.这在我们的应用程序中很常见,我不需要在通过休眠保存它们之前继续创建多个对象并将其编组.

没有人在struts2中有更好的方法来解决此问题吗?

解决方法:

持久性类型转换器

为实体创建类型转换器,然后仅传递user.account而不是user.account.id.这将调用getUser().setAccount(account),不会使您头痛.

更新记录时,只需将user.account传递为表单中的隐藏字段.

至于为您的实体提供的广泛解决方案,您可以选择以下几种:

多个转换器

创建一个处理大多数逻辑的抽象类型转换器,以使您拥有真正轻量级的每个实体的子类.在xwork-conversion.properties中注册每个转换器.

接口驱动转换器

我使用的方法是有一个名为IdBasedJpaEntity的接口,该接口实现了99.9%的实体.它定义了Integer类型的getId()方法.然后,我有一个JpaDAORegistry单例类,该类是在应用程序启动时创建的.我向它注册了我的每个实体,并且它构造了每个DAO的单个实例(基本上是事实上的单例).我有一个实体类到DAO实例的映射.这使我的类型转换器可以为任何给定的IdBasedJpaEntity查找合适的DAO实例,从而使我可以使用一个JpaEntityConverter类,该类可以与实现该接口的任何实体一起使用.这条路线还有很多工作要做,但是对我来说已被证明是高度可重用的.

标签:hibernate,type-conversion,struts2,crud,java
来源: https://codeday.me/bug/20191208/2094076.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有