java xwork_java-与休眠的Struts2 xwork类型转换
在Struts2應(yīng)用程序中轉(zhuǎn)換類型的最佳方法是什么?
現(xiàn)在,我想為我的應(yīng)用程序中的某個(gè)休眠實(shí)體創(chuàng)建CRUD.假設(shè)我想更改與用戶關(guān)聯(lián)的帳戶.只要我具有所有適當(dāng)?shù)墨@取器/設(shè)置器,我就可以傳遞帶有特定值的參數(shù)user.account.id.
第一次創(chuàng)建對(duì)象(帳戶為空)時(shí),這可以很好地工作.這使ognl創(chuàng)建了一個(gè)新的帳戶對(duì)象,并將ID設(shè)置為傳入的對(duì)象.
嘗試更改封裝的Account對(duì)象時(shí),會(huì)發(fā)生此問(wèn)題.使用相同的user.account.id參數(shù),ognl將此解釋為getUser().getAccount().setId(param). Hibernate將此解釋為嘗試更改主鍵.
我知道為什么會(huì)這樣做,我只是想知道是否有更好的方法來(lái)處理這種情況.這在我們的應(yīng)用程序中很常見(jiàn),我不需要在通過(guò)休眠保存它們之前繼續(xù)創(chuàng)建多個(gè)對(duì)象并將其編組.
沒(méi)有人在struts2中有更好的方法來(lái)解決此問(wèn)題嗎?
解決方法:
持久性類型轉(zhuǎn)換器
為實(shí)體創(chuàng)建類型轉(zhuǎn)換器,然后僅傳遞user.account而不是user.account.id.這將調(diào)用getUser().setAccount(account),不會(huì)使您頭痛.
更新記錄時(shí),只需將user.account傳遞為表單中的隱藏字段.
至于為您的實(shí)體提供的廣泛解決方案,您可以選擇以下幾種:
多個(gè)轉(zhuǎn)換器
創(chuàng)建一個(gè)處理大多數(shù)邏輯的抽象類型轉(zhuǎn)換器,以使您擁有真正輕量級(jí)的每個(gè)實(shí)體的子類.在xwork-conversion.properties中注冊(cè)每個(gè)轉(zhuǎn)換器.
接口驅(qū)動(dòng)轉(zhuǎn)換器
我使用的方法是有一個(gè)名為IdBasedJpaEntity的接口,該接口實(shí)現(xiàn)了99.9%的實(shí)體.它定義了Integer類型的getId()方法.然后,我有一個(gè)JpaDAORegistry單例類,該類是在應(yīng)用程序啟動(dòng)時(shí)創(chuàng)建的.我向它注冊(cè)了我的每個(gè)實(shí)體,并且它構(gòu)造了每個(gè)DAO的單個(gè)實(shí)例(基本上是事實(shí)上的單例).我有一個(gè)實(shí)體類到DAO實(shí)例的映射.這使我的類型轉(zhuǎn)換器可以為任何給定的IdBasedJpaEntity查找合適的DAO實(shí)例,從而使我可以使用一個(gè)JpaEntityConverter類,該類可以與實(shí)現(xiàn)該接口的任何實(shí)體一起使用.這條路線還有很多工作要做,但是對(duì)我來(lái)說(shuō)已被證明是高度可重用的.
標(biāo)簽:hibernate,type-conversion,struts2,crud,java
來(lái)源: https://codeday.me/bug/20191208/2094076.html
總結(jié)
以上是生活随笔為你收集整理的java xwork_java-与休眠的Struts2 xwork类型转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 游戏gs是什么意思 4399小游戏
- 下一篇: java中closeable_java的