我有一个名为Node的类可以有很多等级。并且一个等级可以与许多Node对象相关联。这么多人。 我的注释如下:
@Entity
@Table(name="tbl_nodes")
public class Node {
//getters setters, constructors.
private Set<Grade> grades = new HashSet<Grade>();
@ManyToMany(mappedBy = "nodes")
public Set<Grade> getGrades() {
return grades;
}
}
//这里是年级
@Entity
@Table(name="grades")
public class Grade {
private Set<Node> nodes;
// getters, setters, constructors
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "node_grade",
joinColumns = @JoinColumn(name = "grade_id"),
inverseJoinColumns = @JoinColumn(name = "node_id")
)
public Set<Node> getNodes() {
return nodes;
}
}
这两个班级都有@Id注释的课程。例如。对于等级实体,它将是:
@Id
@GeneratedValue
@Column(name="grade_id")
public int getId() {
return id;
}
我的成绩表有5行,当与节点对象建立关系时,将引用行的子集。 我使用以下查询来创建节点和成绩之间的关系。
// loads configuration and mappings
Configuration configuration = new Configuration().configure();
ServiceRegistryBuilder registry = new ServiceRegistryBuilder();
registry.applySettings(configuration.getProperties());
ServiceRegistry serviceRegistry = registry.buildServiceRegistry();
// builds a session factory from the service registry
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
// obtains the session
Session session = sessionFactory.openSession();
session.beginTransaction();
// List all grade
Query queryAllGrades = session.createQuery("FROM Grade");
List<Grade> allGrades = queryAllGrades.list();
for(Grade grade: allGrades) {
System.out.println("Grade::" + grade.getName());
}
// Create a new Node
Node node = new Node();
node.addGrade(allGrades.get(0));
session.save(node);
session.getTransaction().commit();
session.close();
但这只保存了Node对象,但是这并没有写入我的表&#34; node_grade&#34;我错过了什么?
即使我尝试保存成绩对象,它也不会在node_grade中保存关系。
session.save(allGrades.get(0)); //doesn't save either the node or the node_grade
session.saveOrUpdate(allGrades.get(0)); //doesn't save either the node or the node_grade
可能是什么问题?
答案 0 :(得分:1)
您正在修改关联的反面。 Hibernate只关心所有者方。
Node node = new Node();
session.save(node);
allGrades.get(0).addNode(node);