Hibernate 再接触 树状结构设计以及学生课程成绩表的设计
1 树状结构的设计
- package com.bjsxt.hibernate;
- import java.util.HashSet;
- import java.util.Set;
- import javax.persistence.CascadeType;
- import javax.persistence.Entity;
- import javax.persistence.FetchType;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.JoinColumn;
- import javax.persistence.ManyToOne;
- import javax.persistence.OneToMany;
- @Entity
- public class Org {
- private int id;
- private String name;
- private Set<Org> children = new HashSet<Org>();
- private Org parent;
- @Id
- @GeneratedValue
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @OneToMany(cascade=CascadeType.ALL, mappedBy="parent")
- public Set<Org> getChildren() {
- return children;
- }
- public void setChildren(Set<Org> children) {
- this.children = children;
- }
- @ManyToOne
- @JoinColumn(name="parent_id")
- public Org getParent() {
- return parent;
- }
- public void setParent(Org parent) {
- this.parent = parent;
- }
- }
- @Test
- public void testSave() {
- Org o = new Org();
- o.setName("总公司");
- Org o1 = new Org();
- o1.setName("分公司1");
- Org o2 = new Org();
- o2.setName("分公司2");
- Org o11 = new Org();
- o11.setName("分公司1下部门1");
- Org o12 = new Org();
- o12.setName("分公司1下部门2");
- o.getChildren().add(o1);
- o.getChildren().add(o2);
- o1.getChildren().add(o11);
- o1.getChildren().add(o12);
- o11.setParent(o1);
- o12.setParent(o1);
- o1.setParent(o);
- o2.setParent(o);
- Session session = sessionFactory.openSession();
- session.beginTransaction();
- session.save(o);
- session.getTransaction().commit();
- session.close();
- }
- @Test
- public void testLoad() {
- testSave();
- Session session = sessionFactory.openSession();
- session.beginTransaction();
- Org o = (Org)session.load(Org.class, );
- print(o, );
- session.getTransaction().commit();
- session.close();
- }
- private void print(Org o, int level) { //输出
- String preStr = "";
- for(int i=; i<level; i++) { //缩进
- preStr += "----";
- }
- System.out.println(preStr + o.getName());
- for(Org child : o.getChildren()) {
- print(child, level+);
- }
- }
Course
- package com.bjsxt.hibernate;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- @Entity
- public class Course {
- private int id;
- private String name;
- @Id
- @GeneratedValue
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
score
- package com.bjsxt.hibernate;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.JoinColumn;
- import javax.persistence.ManyToOne;
- import javax.persistence.Table;
- @Entity
- @Table(name="score")
- public class Score {
- private int id;
- private int score;
- private Student student;
- private Course course;
- @Id
- @GeneratedValue
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public int getScore() {
- return score;
- }
- public void setScore(int score) {
- this.score = score;
- }
- @ManyToOne
- @JoinColumn(name="student_id")
- public Student getStudent() {
- return student;
- }
- public void setStudent(Student student) {
- this.student = student;
- }
- @ManyToOne
- @JoinColumn(name="course_id")
- public Course getCourse() {
- return course;
- }
- public void setCourse(Course course) {
- this.course = course;
- }
- }
Student
- package com.bjsxt.hibernate;
- import java.util.HashSet;
- import java.util.Set;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.JoinColumn;
- import javax.persistence.JoinTable;
- import javax.persistence.ManyToMany;
- @Entity
- public class Student {
- private int id;
- private String name;
- private Set<Course> courses = new HashSet<Course>();
- @ManyToMany
- @JoinTable(name="score",
- joinColumns=@JoinColumn(name="student_id", referencedColumnName="id"),
- inverseJoinColumns=@JoinColumn(name="course_id", referencedColumnName="id")
- )
- public Set<Course> getCourses() {
- return courses;
- }
- public void setCourses(Set<Course> courses) {
- this.courses = courses;
- }
- @Id
- @GeneratedValue
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
- @Test
- public void testSave() {
- Student s = new Student();
- s.setName("zhangsan");
- Course c = new Course();
- c.setName("java");
- Score score = new Score();
- score.setCourse(c);
- score.setStudent(s);
- Session session = sessionFactory.openSession();
- session.beginTransaction();
- session.save(s);
- session.save(c);
- session.save(score);
- session.getTransaction().commit();
- session.close();
- }
- @Test
- public void testLoad() {
- testSave();
- Session session = sessionFactory.openSession();
- session.beginTransaction();
- Student s = (Student)session.load(Student.class, );
- for(Course c : s.getCourses()) {
- System.out.println(c.getName());
- }
- session.getTransaction().commit();
- session.close();
- }
Hibernate 再接触 树状结构设计以及学生课程成绩表的设计的更多相关文章
- 通过学生-课程关系表,熟悉hive语句
通过学生-课程关系表,熟悉hive语句 1.在hive中创建以下三个表. create table student(Sno int,Sname string,Sex string,Sage int, ...
- Hibernate 再接触 悲观锁和乐观锁
为什么取1248 二进制 CRUD 移位效率高 在并发和效率选择一个平衡点 一般不会考虑幻读 因为我们不会再一个事务里查询两次,(只能设置为seralizable) 悲观锁和乐观锁的前提是read-u ...
- Hibernate 再接触 一级缓存 二级缓存 查询缓存
缓存 就是把本来应该放在硬盘里的东西放在内存里 将来存内存里读 一级缓存: session缓存 二级缓存: sessionFactory级别的 (适合经常访问,数据量有限,改动不大) 很多的se ...
- Hibernate 再接触 性能优化
Sessionclear 否则session缓存里越来越多 Java有内存泄露吗? 在语法中没有(垃圾自动回收) 但是在实际中会有 比如读文件没有关什么的 1+N问题 解决方法:把fetch设置为la ...
- Hibernate 再接触 CRUD
1.save 一对多双向 package com.bjsxt.hibernate; import java.util.HashSet; import java.util.Set; import jav ...
- Hibernate 再接触 多对多单向双向关联
情景:一个老师可能有多个学生,一个学生也可能有多个老师 多对一单向: 例如老师知道自己教哪些学生,学生却不知道自己被哪些老师教 方法:使用第三张表 分别存两张表的id annotation Stude ...
- Hibernate 再接触 核心开发接口
1.可以重载方法进行配置文件的指定 sessionFactory = new AnnotationConfiguration().configure("hibernate.xml" ...
- Hibernate 再接触 ID生成策略
Xml 方法 在student.hbm.xml中 <generator class="uuid"></generator> 取值如下 1.identity: ...
- Hibernate 再接触 HQL
Category.java package com.bjsxt.hibernate; import javax.persistence.Entity; import javax.persistence ...
随机推荐
- spark2.3.0 配置spark sql 操作hive
spark可以通过读取hive的元数据来兼容hive,读取hive的表数据,然后在spark引擎中进行sql统计分析,从而,通过spark sql与hive结合实现数据分析将成为一种最佳实践.配置步骤 ...
- CS229 6.2 Neurons Networks Backpropagation Algorithm
今天得主题是BP算法.大规模的神经网络可以使用batch gradient descent算法求解,也可以使用 stochastic gradient descent 算法,求解的关键问题在于求得每层 ...
- Solr DocValues详解
前言: 在Lucene4.x之后,出现一个重大的特性,就是索引支持DocValues,这对于广大的solr和elasticsearch用户,无疑来说是一个福音,这玩意的出现通过牺牲一定的磁盘空间带来的 ...
- 最小化安装CentOS 7后,图形界面的安装(GNOME、KDE等)
安装图形化界面: 1.首先安装X(X Window System),命令为 yum groupinstall "X Window System" 2.检查一下我们已经安装的软件以及 ...
- iar stm32 启动代码片段分析
今天查看了 iar 上面的启动文件,好奇堆栈指针到底是什么时候赋值的,所以就仔细的阅读了代码和相关手册,找到了答案. 首先,芯片启动后,会从ROM的首地址处进行执行,那么我们从 linker 里面找找 ...
- 'git status'不显示untracked files
git status -uno git status --untracked-files=no
- Java编辑PDF写入文字 插入图片
package com.test; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Font; import com.itex ...
- Maven项目jar包的依懒范围
- python中的update
update()批量写入批量更新字典,举个例子: 1 a = { 2 "name":"dlrb", 3 "age":25, 4 " ...
- cookie、localStorage、sessionStorage和会话控制机制
简介 cookie cookie的内容主要包括:名字Name.值Value.域Domain.路径Path.过期时间Expires/Max-Age.大小Size.HTTP.Secure.SameSite ...