Rumah > Soal Jawab > teks badan
Andaikan objek Objek mempunyai beberapa parameter, dan nama serta nombor parameter tidak pasti Saya ingin tahu bagaimana jadual data harus direka dalam kes ini agar lebih sesuai untuk Hibernate beroperasi
Saya telah menyelesaikan a penyelesaian sebelum ini (Saya ingin mendengar Tuan merungut):
Sebanyak dua jadual digunakan: satu ialah jadual tab dan satu lagi ialah jadual tabmeta, dan tid dalam jadual tabmeta dirujuk kepada id tab untuk mencipta kunci asing (sebenarnya, saya tidak mahu mencipta hubungan ini dalam pangkalan data, saya mahu mencipta kunci asing dalam program Atau lapisan DAO melaksanakan hubungan sedemikian).
Buat kelas entiti yang sepadan ( dijana terus melalui jadual menggunakan kejuruteraan terbalik InteliJ IDEA):
//tab的实体类
@Entity
@Table(name = "tab", schema = "springfkhibernate", catalog = "")
public class TabEntity {
private int id;
private String name;
private Map<Object, TabmetaEntity> tabmetasById;
//省略一些该有的函数和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的实体类
@Entity
@Table(name = "tabmeta", schema = "springfkhibernate", catalog = "")
public class TabmetaEntity {
private int id;
private String metakey;
private String metavalue;
//省略该有的getter和setter
}
Parameter apabila menjana:
Tetapi ini akan menghasilkan dua kelas entiti, satu ialah TabEntity dan satu lagi ialah TabValueEntity Kecelaruan obsesif-kompulsif pada asalnya, kedua-dua jadual ini menggambarkan masalah satu entiti perhubungan satu-ke-banyak antara dua objek Sekarang saya ingin bertanya sama ada boleh menyediakan meta pembolehubah jenis (Hash) dalam TabEntity khusus untuk menyimpan parameter yang tidak pasti ini, supaya Terdapat hanya satu kelas entiti dalam kes ini, bagaimanakah data harus disimpan kembali ke pangkalan data
Jika anda ingin mengakses salah satu parameter pembolehubah dalam kelas entiti yang dijana dengan cara ini, anda memerlukan: TabDao.getEntity(...) .getTabmetasById().get('somekey').getMetaValue()
TabDao.getEntity(...).getTabmetasById().get('somekey').getMetaValue()
来实现,但是如果把这两个表的数据理解成一个实体的数据的话就应该这么实现:TabDao.getEntity(...).getMeta('somekey')
, tetapi jika data kedua-dua jadual ini difahami sebagai data satu entiti, ia sepatutnya seperti ini Pelaksanaan: TabDao .getEntity(...).getMeta('somekey')
Saya tidak tahu sama ada tuan mempunyai cadangan dalam hal ini....
Saya juga ingin bertanya tentang hubungan tuan dengan IDEA Apa impak adakah setiap parameter dalam kotak dialog yang dibuat?
滿天的星座2017-05-17 10:08:59
Sudah tiba masanya untuk bertanya dan menjawab soalan....
Jika anda ingin melaksanakan kaedah yang saya nyatakan di atas dan juga melaksanakan LazyLoad, penjanaan automatik IDEA pada asasnya tidak berguna....Fungsi yang dihasilkan tidak termasuk penciptaan bukan- Jika anda perlu mewujudkan hubungan antara objek, anda hanya boleh menukar fail pemetaan sendiri Mula-mula menjana kelas entiti jadual tab, dan kemudian menambah objek jenis Peta ke kelas entiti tab (lihat halaman lain untuk pemetaan khusus. jenis). Jenis data medan jadual), menjana fungsi getter dan seter yang sepadan.
Kemudian terdapat fail peta:
<map name="values" table="tabmeta">
<key column="tid" foreign-key="id"/><!--虚拟外键:谁和谁相等代表关系-->
<index column="meta_key" type="string"/><!--Map的Key是谁-->
<element column="meta_value" type="double"/><!--Map的Value是谁-->
</map>