我想知道是否有可能将多个表提取到一个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"}
我希望将它们放入信息类并将它们保存到正确的表中
答案 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)
您可以使用secondaryTables
:
http://docs.oracle.com/javaee/6/api/javax/persistence/SecondaryTables.html
答案 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}}