久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java - Hibernate如何處理參數(shù)數(shù)量不定的實(shí)體類

瀏覽:160日期:2023-12-01 18:30:50

問(wèn)題描述

假設(shè)一個(gè)對(duì)象Object有若干個(gè)參數(shù),而參數(shù)的名稱和數(shù)量是不確定的,想知道這種情況下數(shù)據(jù)表應(yīng)該怎么設(shè)計(jì)才會(huì)更適合Hibernate去操作.之前我弄過(guò)一個(gè)方案(想聽(tīng)大神吐槽):一共用到了兩個(gè)表:一個(gè)是tab表,一個(gè)是tabmeta表,并將tabmeta表中的tid參照tab的id創(chuàng)建外鍵(其實(shí)不想在數(shù)據(jù)庫(kù)中創(chuàng)建出這個(gè)關(guān)系,想在程序或者DAO層實(shí)現(xiàn)這樣的關(guān)系).java - Hibernate如何處理參數(shù)數(shù)量不定的實(shí)體類創(chuàng)建出對(duì)應(yīng)的實(shí)體類(用InteliJ IDEA的逆向工程直接通過(guò)表生成的):

//tab的實(shí)體類@Entity@Table(name = 'tab', schema = 'springfkhibernate', catalog = '')public class TabEntity { private int id; private String name; private Map<Object, TabmetaEntity> tabmetasById; //省略一些該有的函數(shù)和geter seter @MapKey(name = 'metakey') @OneToMany(mappedBy = 'tabByTid') public Map<Object, TabmetaEntity> getTabmetasById() {return tabmetasById; } public void setTabmetasById(Map<Object, TabmetaEntity> tabmetasById) {this.tabmetasById = tabmetasById; }}//tabmeta的實(shí)體類@Entity@Table(name = 'tabmeta', schema = 'springfkhibernate', catalog = '')public class TabmetaEntity { private int id; private String metakey; private String metavalue; //省略該有的getter和setter}

生成的時(shí)候的參數(shù):java - Hibernate如何處理參數(shù)數(shù)量不定的實(shí)體類但是這樣會(huì)搞出兩個(gè)實(shí)體類出來(lái),一個(gè)是TabEntity,一個(gè)是TabValueEntity,強(qiáng)迫癥表示不爽啊,本來(lái)這兩個(gè)表描述的是一個(gè)實(shí)體的問(wèn)題,而不是兩個(gè)具有一對(duì)多的兩個(gè)對(duì)象的關(guān)系.現(xiàn)在我想問(wèn)一下能不能實(shí)現(xiàn)在TabEntity中準(zhǔn)備一個(gè)類型為(Hash)Map的變量metas,專門(mén)用來(lái)存儲(chǔ)這些不確定的參數(shù),這樣就只有一個(gè)實(shí)體類了.但是這樣的話,數(shù)據(jù)在回存數(shù)據(jù)庫(kù)的時(shí)候又應(yīng)該怎么實(shí)現(xiàn)呢?現(xiàn)在這種方式產(chǎn)生的實(shí)體類如果想要訪問(wèn)其中的某一個(gè)不定參數(shù)的話,需要:TabDao.getEntity(...).getTabmetasById().get(’somekey’).getMetaValue()來(lái)實(shí)現(xiàn),但是如果把這兩個(gè)表的數(shù)據(jù)理解成一個(gè)實(shí)體的數(shù)據(jù)的話就應(yīng)該這么實(shí)現(xiàn):TabDao.getEntity(...).getMeta(’somekey’)不知道大神有沒(méi)有針對(duì)這方面的建議....另外想問(wèn)問(wèn)大神在IDEA的關(guān)系創(chuàng)建的對(duì)話框中每一項(xiàng)參數(shù)會(huì)產(chǎn)生怎樣的影響.java - Hibernate如何處理參數(shù)數(shù)量不定的實(shí)體類困惑比較大,還望大神們賜教!

問(wèn)題解答

回答1:

又到了自問(wèn)自答的環(huán)節(jié)....如果說(shuō)實(shí)現(xiàn)我上面說(shuō)的那種方式,還要實(shí)現(xiàn)LazyLoad,IDEA自動(dòng)生成基本上是沒(méi)戲的....那個(gè)生成的功能是不包括建立非對(duì)象之間的關(guān)系的,如果需要建立,只能自己去改映射文件.先把那個(gè)tab表的實(shí)體類生成出來(lái),然后在tab的實(shí)體類中添加一個(gè)Map類型的對(duì)象(具體映射的類型看另一個(gè)表的字段數(shù)據(jù)類型),生成對(duì)應(yīng)的geter和seter函數(shù).然后就是map文件:

<map name='values' table='tabmeta'> <key column='tid' foreign-key='id'/><!--虛擬外鍵:誰(shuí)和誰(shuí)相等代表關(guān)系--> <index column='meta_key' type='string'/><!--Map的Key是誰(shuí)--> <element column='meta_value' type='double'/><!--Map的Value是誰(shuí)--></map>

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 图木舒克市| 台东县| 鹤岗市| 绵阳市| 当涂县| 江陵县| 海口市| 安吉县| 长顺县| 南昌县| 汝阳县| 即墨市| 平邑县| 永吉县| 土默特右旗| 尼玛县| 分宜县| 庆阳市| 韩城市| 南康市| 墨竹工卡县| 桂平市| 禄劝| 韶关市| 泸水县| 驻马店市| 巴彦县| 石台县| 祥云县| 科尔| 平顺县| 舒城县| 舟山市| 诏安县| 香格里拉县| 株洲县| 东兴市| 广饶县| 乌海市| 新宾| 青河县|