这是与画布具有一对多关系的人员类:
@Entity
@Table(name="person")
public class Person implements UserDetails{
@Id
@Column(name="id")
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "person_seq_gen")
@SequenceGenerator(name = "person_seq_gen",sequenceName = "person_seq")
private int id;
@OneToMany(mappedBy = "person1",fetch = FetchType.EAGER,cascade = CascadeType.REMOVE)
private Set<Canvas> canvas1 = new HashSet<Canvas>();
public Set<Canvas> getCanvas1() {
return canvas1;
}
public void setCanvas1(Set<Canvas> canvas1) {
this.canvas1 = canvas1;
}
}
画布模型:
@Entity
@Table(name = "canvas")
public class Canvas {
@Id
@Column(name="canvasid")
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "canvas_gen")
@SequenceGenerator(name = "canvas_gen",sequenceName = "canvas_seq")
private int canvasid;
@ManyToOne
@JoinColumn(name = "id",nullable = false)
@JsonIgnore
private Person person1;
public Person getPerson1() {
return person1;
}
public void setPerson1(Person person1) {
this.person1 = person1;
}
public int getPerson1id(){
return this.person1.getId();
}
}
当你想添加画布时,这里是 DAOImpl:
public void addCanvas(Canvas canvas, Person person) {
int id = person.getId();
if( session == null) {
session = this.sessionFactory.openSession();
}else {
session = this.sessionFactory.getCurrentSession();
}
Person person1 = (Person) session.get(Person.class,id);
person.getCanvas1().add(canvas);
canvas.setPerson1(person1);
session.merge(canvas);
session.flush();
}
而且我也有类似你查询的方法:
public List<Canvas> listCanvasPerson(Person person) {
int id = person.getId();
if(session == null){
session = this.sessionFactory.openSession();
} else{
session = this.sessionFactory.getCurrentSession();
}
Query query = session.createQuery("from Canvas as c where c.person1.id=:id order by c.canvasnumber");
query.setParameter("id",id);
List<Canvas> canvasList = query.list();
希望这会有所帮助,如果我在某个地方犯了错误,请告诉我。请理解我使用的是简单键,而不是复合键。