Maison  >  Questions et réponses  >  le corps du texte

Comment Hibernate gère les classes d'entités avec un nombre variable de paramètres

Supposons qu'un objet Object ait plusieurs paramètres et que le nom et le numéro des paramètres soient incertains. J'aimerais savoir comment la table de données devrait être conçue dans ce cas pour être plus adaptée au fonctionnement d'Hibernate. solution avant (je veux entendre le maître se plaindre) :
Un total de deux tables sont utilisées : l'une est la table tab et l'autre est la table tabmeta, et le tid dans la table tabmeta est référencé à l'identifiant de l'onglet pour créer un clé étrangère (en fait, je ne veux pas créer cette relation dans la base de données, je veux créer une clé étrangère dans le programme Ou la couche DAO implémente une telle relation).

Créez la classe d'entité correspondante ( généré directement via la table en utilisant l'ingénierie inverse d'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
}

Paramètres lors de la génération :


Mais cela produira deux classes d'entités, l'une est TabEntity et l'autre est TabValueEntity. Le trouble obsessionnel-compulsif exprime un mécontentement. À l'origine, ces deux tableaux décrivent le problème d'une entité. relation un-à-plusieurs entre deux objets. Maintenant, je voudrais demander s'il est possible de préparer une variable métas de type (Hash)Map dans TabEntity spécifiquement pour stocker ces paramètres incertains, de sorte qu'il n'y ait qu'une seule classe d'entité. dans ce cas, comment les données doivent-elles être enregistrées dans la base de données ?
Si vous souhaitez accéder à l'un des paramètres variables de la classe d'entité générée de cette manière, vous avez besoin de :
TabDao.getEntity(...) .getTabmetasById().get('somekey').getMetaValue()
, mais si les données de ces deux tables sont comprises comme les données d'une entité, cela devrait ressembler à ceci Implémentation : TabDao.getEntity(...).getTabmetasById().get('somekey').getMetaValue()
来实现,但是如果把这两个表的数据理解成一个实体的数据的话就应该这么实现:
TabDao.getEntity(...).getMeta('somekey')TabDao .getEntity(...).getMeta('somekey')
Je ne sais pas si le maître a des suggestions à cet égard....
Je veux aussi poser des questions sur la relation du maître avec IDEA Quoi quel sera l'impact de chaque paramètre dans la boîte de dialogue créée ?

Je suis assez confus, j'espère que les dieux pourront m'éclairer 

 !
我想大声告诉你我想大声告诉你2734 Il y a quelques jours567

répondre à tous(1)je répondrai

  • 滿天的星座

    滿天的星座2017-05-17 10:08:59

    Il est temps de poser et de répondre à nouveau aux questions....
    Si vous souhaitez implémenter la méthode que j'ai mentionnée ci-dessus et également implémenter LazyLoad, la génération automatique d'IDEA est fondamentalement inutile....qui en a généré une La fonction n'inclut pas l'établissement de relations entre non-objets. Si vous devez l'établir, vous ne pouvez modifier le fichier de mappage que vous-même. Générez d'abord la classe d'entité de la table de l'onglet, puis ajoutez un objet de type Map à la classe d'entité de l'onglet. (Le type de mappage spécifique dépend du type de données de champ d'une autre table), et les fonctions getter et seter correspondantes sont générées
    Ensuite, il y a le fichier map :

    .
    <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>

    répondre
    0
  • Annulerrépondre