hibernate annotation 自关联(自联接)配置

网上找了一阵,找到了二个,但一个没写得好(关联的列没有自定义列名),还有一个写得太让人晕了(可能是哪个项目的吧)。没办法,只有仔细研读马老师的视频,终于怎出来了。
自关联,主要就是一对多,多对一的双相关联的应用:
初学的很可能写的类,运行后表里有两个关联列(pid和pid_id两列)。
annotation的配置不好理解,但方便;xml的配置要好理解些.
----------------------------------------------------复制后,写个测试类--------------------------------------------------------------------

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.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="t_organization")
public class Organization {
/**主键*/
private int id;
/**机构名*/
private String name;
/**机构遍号*/
private String sn;
/**机构的说明*/
private String description;
/**父机构*/
private Organization parent;
/**子机构*/
private Set<Organization> children=new HashSet<Organization>();
@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;
}

public String getSn() {
return sn;
}

public void setSn(String sn) {
this.sn = sn;
}


public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}
/**(定义列名) @JoinColumn与@Column相区别的是:@JoinColumn注释的是保存表与表之间关系的字段,它要标注在实体属性上。而 @Column标注的是表中不包含表关系的字段。*/
@ManyToOne //多对一的关联
@JoinColumn(name="pid")//这是自关联的pid列名设置
public Organization getParent() {
return parent;
}

public void setParent(Organization parent) {
this.parent = parent;
}

@OneToMany(mappedBy="parent")//一对多,mappedBy="parent"表示由parent主导(即在parent端有值)
public Set<Organization> getChildren() {
return children;
}

public void setChildren(Set<Organization> children) {
this.children = children;
}

}
--------------------------------------测试类(junt4.x.jar以上)----------------------------------------------------------------
package com.lovo.cq.daoimpl;

import java.util.HashSet;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.Test;

import com.lovo.cq.po.Organization;
import com.lovo.cq.test.util.TestUtil;



public class UserDaoImplTest {

@Test
public void add() {
SessionFactory af=new AnnotationConfiguration().configure().buildSessionFactory();
Session se=af.openSession();
se.beginTransaction();
Set<Organization> set=new HashSet<Organization>();
Organization or1=new Organization();
or1.setName("or1");
set.add(or1);
Organization or2=new Organization();
or2.setName("or2");
set.add(or2);
Organization or3=new Organization();
or3.setName("or2");
set.add(or3);
Organization or=new Organization();
or.setName("or");
or.setChildren(set);
se.save(or);
se.save(or1);
se.save(or2);
se.save(or3);
se.getTransaction().commit();
}

}
--------------------------------------------------------------------------------------------------------------------------------------
hibernate的annotation和xml配置,个人觉得不能一块学,马老师的视频都放一块,我看了一会就晕菜了,然后改攻spring,发现spring上手要容易些,现在做项目了才硬着脑袋怎这个。建议是先学一样,再学另一个样。这样好理解些。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值