我想在Java Hibernate中建立多对多关系的模型 我希望图形有许多类别和类别分配给多个图形 我的java类代码的一部分:
@Entity
@Table(name = "graphic")
public class Graphic {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int graphicId;
@ManyToMany
private Set<Category> categories = new HashSet<Category>(0);
// ...
}
@Entity
@Table(name = "category")
public class category {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int categoryId;
// ...
}
我已经完成的步骤:
1.创建Category
实例
2.在数据库中添加了类别
3.创建Graphic
实例
4.为图形集添加了类别
5.在数据库中添加了图形。
结果:category
和graphic
实例中的记录正常。表graphic_category
已创建,但为空。因此,连接hql查询不会返回任何行
我将非常感谢您如何解决此问题。
编辑:代码为步骤:
//In DBUtil
/**
* Gets category. If none exists creates new.
*/
public Category getCategory(String name) {
String hql = "From Category K where K.name = '" + name + "'";
Query query = session.createQuery(hql);
if (query.list().isEmpty()) {
return saveCategory(name);
} else {
return (Category)query.list().get(0);
}
}
public Category saveCategory(String name) {
Category kat = new Category(name);
session.save(kat);
return kat;
}
public Graphic saveGraphic(Graphic g) {
session.save(g);
return g;
}
//In unit test
Category kat1 = dbUtil.getCategory("kat1-g");
Graphic g1 = new Graphic();
g1.getCategories().add(kat1);
dbUtil.saveGraphic(g1);
我已将autocommit设置为true。
答案 0 :(得分:0)
使用@ManyToMany
时,您必须指定哪个表将保存关系。
@ManyToMany
@JoinTable(name="graphic_category",joinColumns={@JoinColumn(name="graphicId")},inverseJoinColumns={@JoinColumn(name="categoryId")})
private Set<Category> categories;
希望它有所帮助!
答案 1 :(得分:0)
<property name="connection.autocommit">true</property>
即使使用该设置,我也必须在将对象插入数据库后进行session.flush()
以进行持久更改。