您的位置:首页 > 其它

jpa单向一对多关联映射

2017-06-04 19:55 232 查看
如果在一的@OneToMany有@manyToOne则是双向一对多关联,如果在多的那面没有@manyToOne关联则是单向一对多关联

class和student是一对多的关系

表结构

student



class





Class

packageauth.model;

importjava.util.ArrayList;
importjava.util.List;

importjavax.persistence.CascadeType;
importjavax.persistence.Column;
importjavax.persistence.Entity;
importjavax.persistence.GeneratedValue;
importjavax.persistence.GenerationType;
importjavax.persistence.Id;
importjavax.persistence.JoinColumn;
importjavax.persistence.OneToMany;
importjavax.persistence.Table;

@Entity
@Table(name="class")
publicclassRoom{
privateintid;
privateStringname;
privateList<Student>students=newArrayList<Student>();
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
@Column(name="name")
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
@OneToMany(cascade=CascadeType.ALL
,fetch=FetchType.EAGER
)
    @JoinColumn(name="room_id")
    publicList<Student>getStudents(){
      returnstudents;
    }
    publicvoidsetStudents(List<Student>students){
      this.students=students;
    }
}

Student

packageauth.model;

importjavax.persistence.Column;
importjavax.persistence.Entity;
importjavax.persistence.GeneratedValue;
importjavax.persistence.GenerationType;
importjavax.persistence.Id;
importjavax.persistence.Table;

@Entity
@Table(name="student")
publicclassStudent{
privateintid;
publicintroom_id;
privateStringname;
@GeneratedValue(strategy=GenerationType.AUTO)
@Id
@Column(name="id")
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
@Column(name="room_id")
publicintgetRoom_id(){
returnroom_id;
}
publicvoidsetRoom_id(introom_id){
this.room_id=room_id;
}

@Column(name="name")
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}

}


Dao

packageauth.dao;

importorg.springframework.data.jpa.repository.JpaRepository;

importauth.model.MyClass;

publicinterfaceClassDaoextendsJpaRepository<MyClass,Integer>{

}

测试

@Autowired
privateClassDaodao;
publicvoidadd(){
Roomroom=newRoom();
room.setName("5班");
Students=newStudent();
s.setName("小王");
room.getStudents().add(s);
dao.save(room);
Students1=newStudent();
s.setName("小李");
room.getStudents().add(s1);
dao.save(room);
}

publicvoidquery(){
Students=stuDao.findOne(2);
System.out.println(JSONObject.toJSONString(s));

}
publicvoidquery1(){
Rooms=dao.findOne(2);
System.out.println(JSONObject.toJSONString(s));

}


过程

insert
into
class
(name)
values
(?)
2017-06-0423:56:04,251DEBUG[org.hibernate.id.IdentifierGeneratorHelper:94]-Nativelygeneratedidentity:3
2017-06-0423:56:04,272DEBUG[org.hibernate.engine.spi.ActionQueue:196]-Executingidentity-insertimmediately
2017-06-0423:56:04,273DEBUG[org.hibernate.SQL:109]-
insert
into
student
(room_id,name)
values
(?,?)

第一个查询只能查出Student的数据,第二个可以把Class和Student的数据查出来(要设置fetch=FetchType.EAGER
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: