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 アノテーションを定義したクラスが多側になり、他のクラスが One 側になります。単体テストを 2 回目に実行すると、この例外が発生することに注意してください。

ありがとう、アルン

4

1 に答える 1

1

このテストでは、曲、署名者、アルバムをデータベースに作成します。また、アルバム テーブルの列 TITLE に対して、データベースに一意の制約があります。したがって、テストを 2 回目に実行すると、前回の実行で同じタイトルのアルバムが既に作成されているため、例外が発生します。

常に空のデータベースから開始するか、最後に自動ロールバックを使用してテストをトランザクション対応にするようにしてください。

説明については、ドキュメントを参照してください。

恥知らずなプラグイン: 既知のデータ セットを含むデータベースで常にテストを開始するには、DbSetupの使用を検討してください。

于 2013-11-04T22:55:52.437 に答える