JPA-映射单向一对多的关联关系
2018-01-26 21:06
393 查看
用customer表去生成外键,即用1的一端生成外键
@Table(name="customers")
@Entity
public class Customer {
private Integer id;
private String lastname;
private Integer age;
private Set<Order> orders=new HashSet<Order>();
@GeneratedValue(strategy=GenerationType.AUTO)//也可以不写,默认就是自增策略
@Id //strategy:战略,策略 generator:生成,生产
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
//映射单向1-n的关联关系
//使用@OneToMany来映射1-n的关联关系
//使用@JoinColumn来映射外键列的名称
//可以使用@OneToMany(fetch=FetchType.EAGER)来修改默认的加载策略
//可以使用@OneToMany(cascade={CascadeType.REMOVE})来进行级联删除
@OneToMany(fetch=FetchType.EAGER,cascade={CascadeType.REMOVE})
@JoinColumn(name="customer_id")
public Set<Order> getOrders() {
return orders;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
@Override
public String toString() {
return "Customer [id=" + id + ", lastname=" + lastname + ", age=" + age
+ ", orders=" + orders + "]";
}
}
OneToMany的CRUD
public class JPATest {
private EntityManager entityManager;
private EntityTransaction transaction;
private EntityManagerFactory entityManagerFactory;
@Before
public void setUp() throws Exception {
entityManagerFactory = Persistence.createEntityManagerFactory("jpa-1");
entityManager = entityManagerFactory.createEntityManager();
transaction = entityManager.getTransaction();
transaction.begin();
}
@After
public void destroy() {
transaction.commit();
entityManager.close();
entityManagerFactory.close();
}
@Test
public void testOneToManyUpdate(){
Customer customer = entityManager.find(Customer.class, 1);
customer.getOrders().iterator().next().setOrdername("NB");
}
//默认情况下,若删除1的一端,则会先把关联的n的一端的外键置空,再进行删除
//可以使用@OneToMany(cascade={CascadeType.REMOVE})来进行级联删除
@Test
public void testOneToManyRemove(){
// Customer customer = entityManager.find(Customer.class, 1);
// entityManager.remove(customer);
Order order = entityManager.find(Order.class, 3);
entityManager.remove(order);
}
//默认对关联的多的一方使用懒加载策略
//可以使用@OneToMany(fetch=FetchType.EAGER)来修改默认的加载策略
@Test
public void testOneToManyFind(){
Customer customer = entityManager.find(Customer.class, 1);
System.out.println(customer.getLastname());
System.out.println(customer.getOrders().size());
}
//单向1-n关联关系执行保存时,一定会多出update语句,
//因为n的一端在插入时不会同时插入外键列
@Test
public void testOneToManyPersist(){
Customer customer = new Customer();
customer.setAge(12);
customer.setLastname("jiangli");
Order o1=new Order();
o1.setOrdername("AAA");
Order o2=new Order();
o2.setOrdername("BBB");
//建立关联关系
customer.getOrders().add(o1);
customer.getOrders().add(o2);
//执行保存操作
entityManager.persist(customer);
entityManager.persist(o1);
entityManager.persist(o2);
}
}
@Table(name="customers")
@Entity
public class Customer {
private Integer id;
private String lastname;
private Integer age;
private Set<Order> orders=new HashSet<Order>();
@GeneratedValue(strategy=GenerationType.AUTO)//也可以不写,默认就是自增策略
@Id //strategy:战略,策略 generator:生成,生产
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
//映射单向1-n的关联关系
//使用@OneToMany来映射1-n的关联关系
//使用@JoinColumn来映射外键列的名称
//可以使用@OneToMany(fetch=FetchType.EAGER)来修改默认的加载策略
//可以使用@OneToMany(cascade={CascadeType.REMOVE})来进行级联删除
@OneToMany(fetch=FetchType.EAGER,cascade={CascadeType.REMOVE})
@JoinColumn(name="customer_id")
public Set<Order> getOrders() {
return orders;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
@Override
public String toString() {
return "Customer [id=" + id + ", lastname=" + lastname + ", age=" + age
+ ", orders=" + orders + "]";
}
}
OneToMany的CRUD
public class JPATest {
private EntityManager entityManager;
private EntityTransaction transaction;
private EntityManagerFactory entityManagerFactory;
@Before
public void setUp() throws Exception {
entityManagerFactory = Persistence.createEntityManagerFactory("jpa-1");
entityManager = entityManagerFactory.createEntityManager();
transaction = entityManager.getTransaction();
transaction.begin();
}
@After
public void destroy() {
transaction.commit();
entityManager.close();
entityManagerFactory.close();
}
@Test
public void testOneToManyUpdate(){
Customer customer = entityManager.find(Customer.class, 1);
customer.getOrders().iterator().next().setOrdername("NB");
}
//默认情况下,若删除1的一端,则会先把关联的n的一端的外键置空,再进行删除
//可以使用@OneToMany(cascade={CascadeType.REMOVE})来进行级联删除
@Test
public void testOneToManyRemove(){
// Customer customer = entityManager.find(Customer.class, 1);
// entityManager.remove(customer);
Order order = entityManager.find(Order.class, 3);
entityManager.remove(order);
}
//默认对关联的多的一方使用懒加载策略
//可以使用@OneToMany(fetch=FetchType.EAGER)来修改默认的加载策略
@Test
public void testOneToManyFind(){
Customer customer = entityManager.find(Customer.class, 1);
System.out.println(customer.getLastname());
System.out.println(customer.getOrders().size());
}
//单向1-n关联关系执行保存时,一定会多出update语句,
//因为n的一端在插入时不会同时插入外键列
@Test
public void testOneToManyPersist(){
Customer customer = new Customer();
customer.setAge(12);
customer.setLastname("jiangli");
Order o1=new Order();
o1.setOrdername("AAA");
Order o2=new Order();
o2.setOrdername("BBB");
//建立关联关系
customer.getOrders().add(o1);
customer.getOrders().add(o2);
//执行保存操作
entityManager.persist(customer);
entityManager.persist(o1);
entityManager.persist(o2);
}
}
相关文章推荐
- JPA学习笔记-映射单向多对一的关联关系
- JPA学习笔记-映射单向一对多的关联关系
- 6、JPA_映射单向多对一的关联关系(n的一方有1的引用,1的一方没有n的集合属性)
- JPA学习笔记-映射单向多对一的关联关系
- JPA-映射单向多对一的关联关系
- JPA学习笔记-映射单向一对多的关联关系
- JPA 映射单向多对一的关联关系
- Hibernate关联关系映射-----基于连接表的单向多对多映射配置
- 9、JPA_映射双向一对一的关联关系
- jpa单向多对一关联映射
- Hibernate关联关系映射(单向篇)
- JPA的一对多映射(单向)
- Hibernate关联关系映射-----单向多对一映射配置
- Hibernate关联关系映射(单向一对多、单向多对一、双向一对多)
- JPA 对象关系映射之关联关系映射策略
- JPA学习笔记-映射双向一对多的关联关系
- JPA的一对多映射(单向)
- Hibernate关联关系映射-----单向多对一映射配置
- hibernate关联关系映射(1对1 单向 外键)
- JPA学习笔记-映射双向一对一的关联关系