hibernate 配置

zuomingyu2 2009-12-05 10:10:30


<hibernate-mapping package="com.vo">
<class name="Song" table="Song">
<id name="songID" column="songID">
<generator class="native"></generator>
</id>
<!-- 中间省了 -->


<!-- 关系映射 -->

<list name="singers" table="song_singer" cascade="save-update">
<key column="songID"></key>
<index column="song_singer_id"></index>
<one-to-many class="Singer" />
</list>

<many-to-one name="album" class="Album" column="albumID" cascade="save-update"></many-to-one>

</class>
</hibernate-mapping>



<hibernate-mapping package="com.vo">
<class name="Singer" table="Singer">
<id name="singerID" column="singerID">
<generator class="native">
</generator>
</id>



<!-- 映射关系 -->

<many-to-one name="song" not-null="true" class="Song" column="songID" cascade="save-update"></many-to-one>


</class>
</hibernate-mapping>



<hibernate-mapping package="com.vo">
<class name="Album" table="Album">
<id name="albumID" column="albumID">
<generator class="native"></generator>
</id>

<!-- 关系映射 -->

<list name="songs" cascade="save-update">
<key column="albumID"></key>
<index column="album_song_id"></index>
<one-to-many class="Song" />
</list>
</class>
</hibernate-mapping>



Session session = null;
Song song=null;
List<Singer> singers = new ArrayList<Singer>();

try {
session = HibernateSessionFactory.getSession();
session.beginTransaction();
song = new Song();
Singer singer1 = new Singer();
Singer singer2 = new Singer();

singers.add(singer1);
singers.add(singer2);

song.setSingers(singers);
Album album = new Album();
List<Song>songs = new ArrayList<Song>();

songs.add(song);
album.setSongs(songs);

session.save(album);
session.getTransaction().commit()



出现了22:02:31,224 ERROR JDBCExceptionReporter:78 - 在结果列列表中多次出现列名 'albumID'。
org.hibernate.exception.SQLGrammarException: could not insert: [com.vo.Song]Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 在结果列列表中多次出现列名 'albumID'。

部分不重要的代码省略了
...全文
128 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
道光2008 2009-12-06
  • 打赏
  • 举报
回复
Album album = new Album();
List<Song>songs = new ArrayList<Song>();

songs.add(song);
album.setSongs(songs);

session.save(album);
你的主表是是song才对,这里不应该保存album,应该是

List<Song> albums = new ArrayList< album >();

增加多个album到albums 中
song。set Album(albums );
session.save(song);
Trinx 2009-12-06
  • 打赏
  • 举报
回复
楼主,你的Album 和 Song 是个多对一,而Song 又和Singer还是个多对一,那你怎么不直接用Album封装Singer呢?那样看起来多清晰呀?你的配置文件我实在看不出来有什么问题,不过你的级联关系我没看懂,你再仔细检查下吧!
你既然对Album直接save()了,但Song和Singer没有持久化,那你的级联关系可一定要配好。
daokun66 2009-12-06
  • 打赏
  • 举报
回复
<hibernate-mapping package="com.vo">
<class name="Song" table="Song">
<id name="songID" column="songID">
<generator class="native"></generator>
</id>
<!-- 中间省了 -->


<!-- 关系映射 -->

<list name="singers" table="song_singer" cascade="save-update">
<key column="songID"></key>
<index column="song_singer_id"></index>
<one-to-many class="Singer" />
</list>

<many-to-one name="album" class="Album" column="albumID" cascade="save-update" reverse="true"></many-to-one>

</class>
</hibernate-mapping>
reverse="true" 让多的一方放弃维护关系,lz可以试试
daokun66 2009-12-06
  • 打赏
  • 举报
回复
    <hibernate-mapping package="com.vo">
<class name="Song" table="Song">
<id name="songID" column="songID">
<generator class="native"></generator>
</id>
<!-- 中间省了 -->


<!-- 关系映射 -->

<list name="singers" table="song_singer" cascade="save-update">
<key column="songID"></key>
<index column="song_singer_id"></index>
<one-to-many class="Singer" />
</list>

<many-to-one name="album" class="Album" column="albumID" cascade="save-update" reverse="true"></many-to-one>

</class>
</hibernate-mapping>
reverse="true" 让多的一方放弃维护关系,lz可以试试
islandrabbit 2009-12-06
  • 打赏
  • 举报
回复
看了半天,觉得唯一的一个疑点是:

<list name="singers" table="song_singer" cascade="save-update">
<key column="songID"></key>
<index column="song_singer_id"></index>
<one-to-many class="Singer" />
</list>

上面的红色部分应去掉。
frank3G 2009-12-05
  • 打赏
  • 举报
回复
建议最好别这么做。
yang677888 2009-12-05
  • 打赏
  • 举报
回复
是不是id重复了 insert into 不了
yeah_aly 2009-12-05
  • 打赏
  • 举报
回复
の也关注答案
大川101 2009-12-05
  • 打赏
  • 举报
回复
这个我都是反向生成的 具体里面的东东还不太明白。

还有泛型的使用我也不常用。

关注,答案。
zuomingyu2 2009-12-05
  • 打赏
  • 举报
回复
怎么没人啊?

67,513

社区成员

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

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