2016-09-20 5 views
0

私はJavaEEで2番目のプロジェクトを開始し、将来のデバッグの目的でデータベース内のいくつかのデータを初期化するために単純なシングルトンBeanを作成しました。しかし、私は奇妙な問題に固執しています - 永続メソッド(と同様にマージ)データベースに2つの行を作成します。そして、私はすべてがこれです:persist()/ merge()がデータベースに2つの行を作成する理由は何ですか?

@Singleton //ejb singleton 
@Startup 
public class DatabaseInitializer { 

    @PersistenceContext 
    private EntityManager entityManager; 

    @PostConstruct 
    public void initDatabase() { 
    Calendar releaseDate = Calendar.getInstance(); 
    releaseDate.set(2010, 6, 16); 
    Movie movie; 
    List<Genre> genres = Arrays.asList(Genre.ACTION, Genre.ADVENTURE, Genre.MYSTERY, Genre.SCIFI, Genre.THRILLER); 
    movie = new Movie("inception-2010", "Inception", 
      "long string", releaseDate, "http://inceptionmovie.warnerbros.com/", genres); 

    entityManager.persist(movie); 
    } 
} 

そして、これは作品の実体がどのように見えるかです:私はこの問題をグーグルしようとしたが、人々が台無しJPAでのそれらの関係を場合に発生するようだが、

@Entity 
public class Movie { 
    @Id 
    @TableGenerator(name = "MovieSeq") 
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "MovieSeq") 
    private int id; 

    // @Column(unique = true) //couses exception due to creaton of two rows 
    private String uniqueName; 

    private String title; 

    @Column(length = 1024) 
    private String overview; 

    @Temporal(TemporalType.DATE) 
    private Calendar releaseDate; 

    private String homepage; 

    @ElementCollection //tried removing this property, doesn't matter, 
    private List<Genre> genres; //simple list of emuns 

    //constructors, getters/setters 
    ... 
} 

これが最も単純なケースであることがわかります。 もちろん、10枚のムービーを作成すると、JPAは20行などを作成します。

私は、EclipseLinkをJPAプロバイダとして使用するGlassfish(Payara)を使用しています。まったく問題がなければ、Oracle 11gは自分のデータベースです。私はこの問題をどのように修正するのか分かりません。なぜなら、私のデザインに潜在的な問題があるかどうか分からないからです。

+1

_initDatabase_メソッドが2回呼び出されていないことは確かですか? –

+0

はい、私はそれを自分で呼び出すのではなく、私はまだそれを呼び出す方法がありません。 – newfolder

+1

私はあなたがそれを呼んでいるとは言わなかったが、私はあなたにそれが2回呼び出されていないことを確認するように頼んだ(デバッガやログステートメントなどで確認できる)。 –

答えて

0

Dragan Bozanovic提案された問題は、@PostConstructメソッドが2回呼び出されることによって解決されます。私はまだそれを修正しようとしていますが、別の質問のトピックです

関連する問題