Hibernate ManyToOne:为密钥'TITLE异常重复输入'album1'

时间:2013-11-04 22:48:15

标签: java hibernate junit annotations many-to-one

当我尝试在hiberate中使用 ManyToOne 关系时,我收到了重复的密钥异常。我相信我可以在这里发布图片。

entity diagram http://i39.tinypic.com/ilaxko.png

这些是我的课程。

  1. 专辑类 album class http://i44.tinypic.com/2mnhf60.png

  2. 歌曲课 Song class http://i44.tinypic.com/1g6h42.png

  3. 当我尝试执行单元测试时,我得到以下异常。

        Caused by:    com.mysql.jdbc.exceptions.jdbc4
        .MySQLIntegrityConstraintViolationException: 
        Duplicate entry 'album1' for key 'TITLE'
    

    我的单元测试课程如下。

        @RunWith(SpringJUnit4ClassRunner.class)
        @ContextConfiguration(locations={"file:src/test/ApplicationContext-unitFav.xml"})
        public class MusicDaoImplTest{
    
            @Autowired
            private MusicDao musicDao;
    
            @Test
            public void testAddSong() {
                Album album = new Album("album1","movie",2009);
                Singer singer = new Singer("singer 1",new Date());
                Song song = new Song("song 1",album,singer,0);
                musicDao.addSong(song);
            }
        }
    

    这次错在​​哪儿?当我使用ManyToOne注释时,我定义ManyToOne Annotation的类成为多边,而另一个类成为One侧。请注意,当我第二次运行单元测试时,我遇到了这个例外。

    谢谢, 阿伦

1 个答案:

答案 0 :(得分:1)

测试在数据库中创建歌曲,签名者和专辑。并且您在数据库中对专辑表的列TITLE有一个唯一约束。因此,第二次运行测试时,由于上一次运行已经创建了一个具有相同标题的相册,因此会出现异常。

确保始终从空数据库开始,或者在最后使用自动回滚使测试成为事务性的。

有关解释,请参阅the documentation

无耻插件:要始终使用包含众所周知数据集的数据库开始测试,您可以考虑使用DbSetup