我在使用Hibernate和自定义CompositeUserType键将非空集返回到对象时遇到了一些问题。
我有一组表和视图(在这里简化):
create table lang (lang_id,lang_cd);
create table article (art_id,...);
create table article_lang (art_id, lang_id,title,...);
create view article_lang_vw (select * from article join article_lang on art_id);
create table authors(user_id,...);
create table article_authors(art_id,lang_id,user_id); 和数据库函数:
create or replace procedure addarticle(title,art_id,lang_id) ...
create or replace procedure updatearticle(title,art_id,lang_id)..
create or replace procedure delarticle(art_id,lang_id)..
create or replace procedure addarticleauthor(user_id,art_id,lang_id)...
create or replace procedure delarticleauthor(user_id,art_id,lang_id)...因此,为了使用这些函数完成这个映射,我必须实现CompositeUserType,所以现在我有如下的Java类:
class ProcedureGenerator implements PostInsertIdentityGenerator ...
class Language { int lang_id }
class ArticleLangPKType implements CompositeUserType { //implemented methods }
class ArticleLangPK { int art_id; Language l; }
class Article { ArticleLangPK id; String title; Set<Author> authors; }
class Author { int user_id; String name; }我想要一个作者列表或一组作者。但是不知道如何在*.hbm.xml文件中映射这个部分。它目前看起来像这样:
<class name="Author" mutable="false">
<id name="user_id"/>
<property name="name"/>
</class>
<class name="Article">
<id name="id" type="ArticleLangPKType">
<column name="art_id"/>
<column name="lang_id"/>
<generator class="ProcedureGenerator"/>
</id>
<property name="title"/>
<set name="authors" table="article_authors">
<key> <!-- <key type="ArticleLangPKType"> -->
<column name="art_id"/>
<column name="lang_id"/>
</key>
<many-to-many class="Author" table="article_authors" unique="true"/>
<!-- addauthor, delauthor sql here some how -->
</set>
<sql-insert callable="true">{call addarticle(?,?,?)}</sql-insert>
<sql-update callable="true">{call updatearticle(?,?,?)}</sql-update>
<sql-delete callable="true">{call adddelete(?,?)}</sql-delete>
</class>但是,当我在一篇我知道有作者的文章上运行这个session.load(Article.class, pk)时,我得到的集合大小为零。否则我使用Hibernate插入、更新和删除都没有问题,但现在我被难住了。在我看来,这似乎表明我的ArticleLangPKType有问题。
有什么办法来完成这项工作吗?为什么我的套装总是大小为0?如何使用文章集和所提供的SQL过程保存作者?Hibernate适合我吗?我需要休息一下才能看清楚这一点吗?
提前感谢!
发布于 2010-06-11 22:26:07
不要紧,我确实需要长时间的休息。我的ArticleLangPK没有正确覆盖hashCode和Equals。现在来弄清楚如何正确地调用另外两个存储过程。
https://stackoverflow.com/questions/3019619
复制相似问题