集合映射(不太重要)
1 Set
2 List (与Set差不多 多个@OrderBy)
a) @OrderBy 排序
private List<User> users = new ArrayList<User>(); @OneToMany(mappedBy="group", cascade={CascadeType.ALL} ) @OrderBy("name ASC") public List<User> getUsers() { return users; } public void setUsers(List<User> users) { this.users = users; }
3 Map
a) @Mapkey
private Map<Integer, User> users = new HashMap<Integer, User>(); @OneToMany(mappedBy="group", cascade=CascadeType.ALL) @MapKey(name="id") public Map<Integer, User> getUsers() { return users; } public void setUsers(Map<Integer, User> users) { this.users = users; }
@Test public void testLoadGroup() { Session s = sessionFactory.getCurrentSession(); s.beginTransaction(); Group g = (Group)s.load(Group.class, 1); for(Map.Entry<Integer, User> entry : g.getUsers().entrySet()) { System.out.println(entry.getValue().getName()); } s.getTransaction().commit(); }
继承映射(不太重要)
一 三种方式
a) 一张总表SINGLE_TABLE(数据库中生成一张表)
@Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="discriminator", discriminatorType=DiscriminatorType.STRING) @DiscriminatorValue("person") public class Person { 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; } }
@Entity @DiscriminatorValue("student") public class Student extends Person { private int score; public int getScore() { return score; } public void setScore(int score) { this.score = score; } }
@Entity @DiscriminatorValue("teacher") public class Teacher extends Person { private String title; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } }
@Test public void testSave() { Student s = new Student(); s.setName("s1"); s.setScore(80); Teacher t = new Teacher(); t.setName("t1"); t.setTitle("中级"); Session session = sessionFactory.openSession(); session.beginTransaction(); session.save(s); session.save(t); session.getTransaction().commit(); session.close(); } @Test public void testLoad() { testSave(); Session session = sessionFactory.openSession(); session.beginTransaction(); Student s = (Student)session.load(Student.class, 1); System.out.println(s.getScore()); Person p = (Person)session.load(Person.class, 2); System.out.println(p.getName()); session.getTransaction().commit(); session.close(); }
b) 每个类分别一张表TABLE_PER_CLASS
@Entity @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) @TableGenerator( name="t_gen", table="t_gen_table", pkColumnName="t_pk", valueColumnName="t_value", pkColumnValue="person_pk", initialValue=1, allocationSize=1 ) public class Person { private int id; private String name; @Id @GeneratedValue(generator="t_gen", strategy=GenerationType.TABLE) 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; } }
@Entity public class Student extends Person { private int score; public int getScore() { return score; } public void setScore(int score) { this.score = score; } }
@Entity public class Teacher extends Person { private String title; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } }
c) 每个子类一张表jOINED
父类上加注解@Inheritance(strategy=InheritanceType.JOINED)
@Entity @Inheritance(strategy=InheritanceType.JOINED) public class Person { 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; } }
时间: 2024-10-06 06:55:59