问一个hibernate关联插入数据的问题 急

成都清香白莲 2007-03-16 09:00:24
一个父类A,有字段id,name,id为主键,一个子类B,有字段id,aid,name1,name2,其中aid对应A的id,id都是自动生成的,A对B是一对多的关系,关联关系已经建好了,我想问一下,在对A插入新数据的同时向B插入数据,java中的语句应该如何写,谢谢
...全文
437 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sole_lodestar 2007-03-16
  • 打赏
  • 举报
回复

public static void main(String[] args) {
// TODO Auto-generated method stub
Manager manager = new Manager();
if ( args[0].equals("po") ) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Person p = new Person();
p.setBirthdate(new Date());

p.setSex('m');
p.setWeight(222);
session.save(p);
session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
} else if ( args[0].equals("asp") ) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List pList = session.createQuery("from Person").list();
for ( int i = 0; i < pList.size(); i ++ ) {
Person p = (Person)pList.get(i);
Address a = new Address();
a.setName("addressNameasp");
a.setPerson(p);
//p.addAddress(a);
session.save(a);
//session.save(p);
}
session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
} else if ( args[0].equals("psa") ) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List pList = session.createQuery("from Person").list();
for ( int i = 0; i < pList.size(); i ++ ) {
Person p = (Person)pList.get(i);
Address a = new Address();
a.setName("addressNamepsa");
//a.setPerson(p);
p.addAddress(a);
//session.save(a);
session.save(p);
}
session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
} else if ( args[0].equals("listp") ) {
List list = manager.getPerson();
for ( int i = 0; i < list.size(); i ++ ) {
Person p = (Person)list.get(i);
System.out.println("p.getId()="+p.getId());
}
} else if ( args[0].equals("lista") ) {
List list = manager.getAddress();
for ( int i = 0; i < list.size(); i ++ ) {
Address a = (Address)list.get(i);
System.out.println("a.getId()="+a.getId()+"=a.getPerson().getId()="+a.getPerson().getId());
}
} else if ( args[0].equals("listpa") ) {
List list = manager.getPerson();
for ( int i = 0; i < list.size(); i ++ ) {
Person p = (Person)list.get(i);
System.out.println("p.getId()="+p.getId());
List al = manager.getAddress(p);
for ( int j = 0; j < al.size(); j ++ ) {
Address a = (Address)al.get(j);
System.out.println("p.getId()="+p.getId()+"-a.getId()="+a.getId());
}
}
} else if ( args[0].equals("delp") ) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Person p = (Person)session.createQuery("from Person").list().get(0);
session.delete(p);
session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
} else if ( args[0].equals("dela") ) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Address a = (Address)session.createQuery("from Address").list().get(0);
session.delete(a);
session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
}
}
sole_lodestar 2007-03-16
  • 打赏
  • 举报
回复
address映射中 <many-to-one name="person" column="person_id" not-null="true"/>
public class Address {

private Long id;
private String name;

private Person person;

public Address () {}

public Long getId() {
return id;
}
……
}

person映射中
<set name="address" inverse="true" cascade="all-delete-orphan">
<key column="person_id" not-null="true"/>
<one-to-many class="Address"/>
</set>

public class Person {

private Long id; // identifier

private Date birthdate;
private char sex;
private float weight;
private Set address = new HashSet();

public Person() {}

public Set getAddress() {
return address;
}

public void setAddress(Set address) {
this.address = address;
}
……

public void addAddress (Address address) {
address.setPerson(this);
this.address.add(address);
}
}


public List getPerson () {
List list = new ArrayList();
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
list = session.createQuery("from Person").list();
session.getTransaction().commit();
return list;
}
public List getAddress () {
List list = new ArrayList();
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
list = session.createQuery("from Address").list();
session.getTransaction().commit();
return list;
}
public List getAddress ( Person p ) {
List list = new ArrayList();
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Query q = session.createQuery("from Address where person_id=?");
q.setLong(0, p.getId().longValue());
list = q.list();
session.getTransaction().commit();
return list;
}
sole_lodestar 2007-03-16
  • 打赏
  • 举报
回复
E:\hibernate-3.2\doc\tutorial\多对多的
E:\hibernate-3.2\test\org\hibernate\test\全部例子
成都清香白莲 2007-03-16
  • 打赏
  • 举报
回复
sole_lodestar(弱势群体应该怎么办) hibernate我下了的,但是包的文件太多,不晓得具体的例子在哪,不好找,烦请告知谢谢
sole_lodestar 2007-03-16
  • 打赏
  • 举报
回复
http://sourceforge.net/project/showfiles.php?group_id=40712&package_id=127784&release_id=481087
成都清香白莲 2007-03-16
  • 打赏
  • 举报
回复
我想的话应该很简单,但是没做过.用得急,所以求各位帮忙,谢谢
dangerrei 2007-03-16
  • 打赏
  • 举报
回复
帮忙顶
成都清香白莲 2007-03-16
  • 打赏
  • 举报
回复
A a = new A();
a.setName("zhangsan");
a.getB.add(new B());

事务和session部分我晓得,现在主要是我不晓得B的几个字段如何插入
成都清香白莲 2007-03-16
  • 打赏
  • 举报
回复
sole_lodestar(弱势群体应该怎么办) 能不能告诉我例子的具体位置,太多文件,没找到,谢谢
sole_lodestar 2007-03-16
  • 打赏
  • 举报
回复
楼主看一下hibernate自带的例子,很简单的
成都清香白莲 2007-03-16
  • 打赏
  • 举报
回复
谢谢哥们,不过解决问题才是关键啊
yeah920 2007-03-16
  • 打赏
  • 举报
回复
帮忙顶

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧