1.一对一:
一篇文章对应一个栏目:
文章类中:
@OneToOne(cascade=CascadeType.MERGE)
@JoinColumn(name="newsclass_id")
public NewsClass getNewsClass() {
return newsClass;
}
public void setNewsClass(NewsClass newsClass) {
this.newsClass = newsClass;
}
栏目类中:
无需配置什么
2.一对多: 查用户可以获取用户拥有的所有文章的信息
一个用户有多篇文章:
用户类中:
private List<News> items= new ArrayList<News>();
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,mappedBy="user")
public List<News> getItems() {
return items;
}
public void setItems(List<News> items) {
this.items = items;
}
文章类中:
@OneToOne(cascade=CascadeType.MERGE)
@JoinColumn(name = "user_id")
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
双向一对多:一个用户有多篇文章,如果在文章类这里弄成ManytoOne则,默认在设置文章的时候,新增用户。且设置用户时,id不能赋值,否则出现entity.passed to persist错误
用户类中:
private List<News> items= new ArrayList<News>();
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,mappedBy="user")
public List<News> getItems() {
return items;
}
public void setItems(List<News> items) {
this.items = items;
}
文章类中:
@ManyToOne(targetEntity=User.class,cascade={CascadeType.ALL})
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
看场景来运用:最常用就是一对一和一对多了。
事务:增
private EntityManagerFactory emf;
public EntityManagerFactory getEmf() {
return emf;
}
@Autowired
public void setEmf(EntityManagerFactory emf) {
this.emf = emf;
}
@Test
public void testshiwu()throws Exception {
EntityManager em=this.getEmf().createEntityManager();
em.getTransaction().begin();
try{
for(int i=0;i<5;i++)
{
User user=new User();
user.setEmail(i+"sdsd@qq.com");
em.persist(user);
}
em.getTransaction().commit();
}
catch (Exception e) {
em.getTransaction().rollback(); //此句可不要
}
em.close();
}
事务:删:先查后删,直接set完,remove会出现Removing a detached instance 错误
@Test
public void testremove()throws Exception {
EntityManager em=this.getEmf().createEntityManager();
em.getTransaction().begin();
for(int i=1;i<5;i++)
{
User user=new User();
user.setId(i);
em.remove(em.merge(user));
}
em.getTransaction().commit();
em.close();
}
事务:改:
方法一:
@Test
public void testupdate()throws Exception {
EntityManager em=this.getEmf().createEntityManager();
em.getTransaction().begin();
for(int i=25;i<30;i++)
{
User user=new User();
user.setId(i);
user.setEmail("wwwww.com");
em.merge(user);
}
em.getTransaction().commit();
em.close();
}
方法2:查到后改
@Test
public void testupdatetwo()throws Exception {
EntityManager em=this.getEmf().createEntityManager();
em.getTransaction().begin();
for(int i=25;i<30;i++)
{
User user=em.find(User.class,i);
user.setEmail("www");
em.flush();
//em.merge(user);
}
em.getTransaction().commit();
em.close();
}
至此结束