论坛首页 Java企业应用论坛

hibernate入门篇之新增功能_3:one-to-many

浏览 37620 次
该帖已经被评为精华帖
作者 正文
   发表时间:2004-01-13  
totoblue 兄,您要把您的代码列出来,大家才可以看看问题出现在那里阿。
0 请登录后投票
   发表时间:2004-01-14  
谢谢关心,翻看了以前的文章,我把问题已经解决。

不能更新的原因在于没有加
    cascade

对于one to many 有问题的朋友,可以去翻翻前面的文章。
0 请登录后投票
   发表时间:2004-01-14  
为什么我在Author.java里面加上
private Set publications = new HashSet(); 就开始报错误了?
0 请登录后投票
   发表时间:2004-01-15  
不知道您出现什么问题,您有没有在Author.java import java.util.*呢?
0 请登录后投票
   发表时间:2004-03-10  
好例子 多谢smallduzi.

但是我运行例子的时候发现如果用SchemaExport来生成数据库的表的时候会有错误, 主要的原因是由于Publication表的authorid字段变成了varchar(255)的. 导致外键添加不成功. 不知道各位有没有碰到这样的问题.
解决方法是在author的描述xml里面的id element里加入length="40" 这东西. 但是这样解决并不好. 因为这样的话 如果修改了person就必须同时修改author 好麻烦

不知道该怎么解决 还是只有SQL2K才有这样的问题??
0 请登录后投票
   发表时间:2004-04-06  
感谢smallduzi兄,给新人这么多帮助,可否将one-to-many的代码发我看看吗?flyfox2008@hotmail.com,谢谢了.
我总出异常 ,试了好多遍,我用的是hibernate.cfg.xml不是属性文件,应该不是这个问题吧.......前几个例子都成功了.
Hibernate: insert into person (name, email, id) values (?, ?, ?)

Hibernate: insert into author (alias, id) values (?, ?)

Hibernate: insert into publication (bookname, datatime, authorid, id) values (?, ?, ?, ?)

net.sf.hibernate.JDBCException: Could not execute JDBC batch update
at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:125)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2311)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2261)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2187)
at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61)
at com.javamodel.hibernate.Example.main(Example.java:63)

Caused by: java.sql.BatchUpdateException: ORA-00904: ????????
at oracle.jdbc.dbaccess.DBError.throwBatchUpdateException(DBError.java:441)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:3377)
at net.sf.hibernate.impl.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:54)
at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:118)
... 5 more

Exception in thread "main"
0 请登录后投票
   发表时间:2004-04-06  
http://forum.iteye.com/viewtopic.php?t=2991

不好意思,这是我很早以前做的例子,测试不一定能通过。抱歉了。
0 请登录后投票
   发表时间:2004-04-07  
如果在Publication表里面,
如果id和AuthorId都是主键怎么解决,
也就是双主键,而且authorid还要做外键,
hbm.xml都该怎样写.
smallduzi请帮忙解决
0 请登录后投票
   发表时间:2004-04-30  
我想将以前用JDBC写的东西移植到Hibernate上来,但是在处理一个一对多关系的时候出现问题。
Category类,表示一个类别,类似于目录。系统中只有一个跟类别,然后是子类别。
package test;

public class Category {
/*<------------------------------------------------------// CONSTANTs //----->*/
    public static final Category ROOT = new Category("ROOT");;
/*<---------------------------------------------------------// FIELDs //----->*/
    private long id;
    private String name;
    private String desc;
    private Category parent;
/*<---------------------------------------------------// CONSTRUCTORs //----->*/
    public Category(); { /* do nothing */    }

    public Category(String name); { setName(name);; }

    public Category(String name, Category parent); {
        this(name);;
        setParent(parent);;
    }
/*<-----------------------------------------------------// PROPERTIES //----->*/
    public long getId(); { return id;}

    private void setId(long id); { this.id = id; }

    public String getName(); { return name; }

    public void setName(String name); { this.name = name;}

    public String getDesc(); { return desc;}
 
    public void setDesc(String desc); { this.desc = desc; }

    public Category getParent(); { return parent; }

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

我是这样映射的:
        <class name="test.Category" table="CATEGORY">
                <id name="id" column="CATEGORY_ID" type="long">
                        <generator class="hilo"/>
                </id>
                <property name="name" type="string"  not-null="true"/>
                <property name="desc" column="DESCRIPTION" type="string"/>
                <many-to-one name="parent" column="PARENT_ID" insert="false" update="false"/>
        </class>

但是在向根类别中添加一个新的类别时遇到问题,因为我无法指出根类别是谁,因为它根本不存在。请问这样的问题在Hibernate中如何解决?
0 请登录后投票
   发表时间:2004-05-12  
按照smallduzi的例子,程序毫无问题。但自己在调试的时候,根据实际情况作了一些修改,发生以下这个问题,不知道有谁能提供解决的方式!

如果有2个表

表名  主键         其他字段                  对应的类
T1     t1_pk                ......                           classT1
T2     t2_pk             t1_pk    .......                classT2

2个表各自有主键,表T2有外键指向t1。

classT1 t1 = new classT1();
...

classT2 t2 = new classT2();
.....


t2.setLocation(t1);
t1.getArea().add(t2);

这个时候进行保存
tx = session.beginTransaction();
session.save(t1);   ---  根据文档,此时只要保存t1,会自动保存t2
tx.commit();
session.close();

在进行commit的时候发生错误!
通过打开hibernate的sql输出,发现 t1保存采用insert的方式
        而t2的保存采用了update方式,
(而采用smallduzi的例子,这2个实例的保存都是采用insert方法保存的)

现在只能用最笨的方式处理:
先保存t1,在保存t2,将2者关联起来后再次保存t1.

在hibernate内部是怎么做得?如果碰到了这种问题该如何处理?
hibernate应该能够解决这类问题的吧。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics