Hibernate一个类到多个表

时间:2015-12-14 14:14:34

标签: java hibernate

我想知道是否有可能将多个表提取到一个java类  例如:

TABLE LABELS;
TABLE STANDARDS;
TABLE REFERENCES;

映射到同一个类

public Class Information {

    private String type; // the type is the element who have to do the mapping => LABELS/STANDARDS/REFERENCES
    ...
}

由于技术原因,我不可能为每种类型构建一个类(我知道某些遗产应该很酷)。

谢谢

吉勒

编辑:

我会尝试更多地表达:)

我正在使用JMS服务来获取信息。每条消息都有一个特殊的类型,(在我的例子中:"标签","标准""参考")。

通过使用这些类型,我想在相应的表中持久化信息。每个消息的结构都完全相同,这就是为什么我想使用一个独特的POJO。

我希望能更好地解释一下:)

编辑2:

TABLE LABELS (
    ID PRIMARY KEY AUTO_INCREMENT,
    MESSAGE VARCHAR(255),
    AUTHOR VARCHAR(255)
);
TABLE STANDARDS(
    ID PRIMARY KEY AUTO_INCREMENT,
    MESSAGE VARCHAR(255),
    AUTHOR VARCHAR(255)
);
TABLE REFERENCES (
    ID PRIMARY KEY AUTO_INCREMENT,
    MESSAGE VARCHAR(255),
    AUTHOR VARCHAR(255)
);

以及JMS的一些例子

headers : 
    type : label
body:
    {message:"name of the country",author:"john doe"}

headers : 
    type : label
body:
    {message:"nom du pays",author:"jenny doe"}

headers : 
    type : reference
body:
    {message:"country",author:"john doe"}

我希望将它们放入信息类并将它们保存到正确的表中

3 个答案:

答案 0 :(得分:1)

试试这个:

 @MappedSuperclass
 public class Base {
   private String message;
   private String autor;
   @Column(name = "MESSAGE")
   public String getMessage(){
     return message;
   }
   public void setMessage(final String message) {
     this.message = message;
   }
   @Column(name = "AUTOR")
   public String getAutor(){
     return autor;
   }
   public void setAutor(final String autor) {
     this.autor = autor;
   }
 }

三个班级:

 @Entity
 @Table(name="LABELS")
 public class Labels extends Base{};

并且

 @Entity
 @Table(name="STANDARDS")
 public class Standards extends Base{};

并且

 @Entity
 @Table(name="REFERENCES")
 public class References extends Base{};

现在您可以使用以下方法保存数据:

 Base b;
 if (info.getType().equals("REFERENCES")) {
    b=new References();
 } else if (info.getType().equals("LABELS")) {
    b=new Labels();
 } else if (info.getType().equals("STANDARDS")) {
    b=new Standards();
 } else {
   return;
 }
 b.setMessage(info.getMessage());
 b.setAutor(info.getAutor());
 Transaction t = session.beginTransaction();
 session.persist(b);
 t.commit();

答案 1 :(得分:0)

答案 2 :(得分:0)

您可能会问是否可以执行table per subclass映射。每个表可以有一个类,但都可以从公共基类继承。

或者,如果您正在构建只读映射,则可以在所有相关表上创建一个-- SQL CREATE VIEW information AS SELECT 'LABEL' AS type,... FROM labels UNION SELECT 'STANDARD',... FROM standards UNION SELECT 'REFERENCE',... FROM references ; /* Java */ @Entity @Table(name="information") public class Information { ... } 的视图,并使用Hibernate映射视图。像

这样的东西
{{1}}