我刚刚开始使用Hibernate ORM学习Java数据库持久性,并遇到了一个我无法解决的问题。休眠 - 坚持嵌入式资源
我有以下两类:
@Embeddable
public class Resource {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Resource() {
}
}
@Entity
public class Group {
@Embedded
private Map<String, Resource> resources;
@Id
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Map<String, Resource> getResources() {
return resources;
}
public void setResources(Map<String, Resource> resources) {
this.resources = resources;
}
public Group() {
resources = new HashMap<String, Resource>();
}
}
资源不应该有自己的表,因为它不应该在集团范围之外存在。这就是为什么我使用Embeddable作为组件处理的原因。
总结我想知道如何使用Hibernate ORM将这些类存储在数据库中。 Resource类不应该是一个实体,因为它不需要它自己的类。
我宁愿使用映射符号而不使用XML文件。
因为它是我得到这个错误:
Syntax error in SQL statement "INSERT INTO GROUP[*] (NAME) VALUES (?) "; expected "identifier"; SQL statement:
如果一个组可以有多个资源,那么您希望如何在不创建另一个表的情况下存储它们? – Affe 2012-03-06 00:15:45
不能像任何其他属性一样被序列化吗?像一个字符串? 还是我得到嵌入错误? – 2012-03-06 00:17:39
@doubter - 嵌入式集合需要单独的表进行存储。原因应该非常明显 - 集合表示主实体和嵌入式实体之间的一对多关系,它不能(在一个表中)(正确)表示。 – Perception 2012-03-06 00:20:50