0

当我尝试在休眠中使用ManyToOne关系时,出现重复键异常。我相信我可以在这里发布图片。

实体图

这些是我的课。

  1. 专辑班 专辑类

  2. 歌曲班 歌曲类

当我尝试执行单元测试时,出现以下异常。

    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 注释的类成为多方,另一个类成为单方。请注意,当我第二次运行单元测试时,我遇到了这个异常。

谢谢,阿伦

4

1 回答 1

1

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

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

有关说明,请参阅文档

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

于 2013-11-04T22:55:52.437 回答