我在JavaEE中开始了我的第二个项目,并创建了简单的单例bean来初始化数据库中的一些数据以用于未来的调试目的。 然而,我坚持奇怪的问题 - 持久性方法(以及合并)在数据库中创建两行。 我所做的就是这样:
@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); } }这就是Movie实体的外观:
@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 ... }我试着用Google搜索这个问题,但是如果人们在JPA中搞砸他们的关系似乎就会发生,但是我们可以看到这是最简单的情况。 当然,如果我创建10部电影,那么JPA会创建20行,依此类推。
我使用Glassfish(Payara),它使用EclipseLink作为JPA提供程序,Oracle 11g是我的数据库,只要它很重要。 我不知道如何解决这个问题,因为我对我的设计没有任何潜在的问题。
I am starting my second project in JavaEE and created simple singleton bean to init some data in database for future debug purposes. However, I am stuck at strange problem - persist method(as well as merge) creates two rows in database. And all I do is this:
@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); } }And this is how Movie entity looks like:
@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 ... }I tried googling this problem but it seems to happen if people mess up their relationships in JPA, but as we can see this is simplest case ever. Of course if I create 10 movies then JPA creates 20 rows and so on.
I am using Glassfish(Payara) which uses EclipseLink as JPA provider and Oracle 11g is my database if it matters at all. I have no idea how to fix this, because I don't have any idea of potential problems with my design.
最满意答案
Dragan Bozanovic提出的问题是由@PostConstruct方法调用两次。 我仍在努力解决这个问题,但这是另一个问题的主题
As Dragan Bozanovic suggested problem is coused by @PostConstruct method called twice. I am still working on fixing that, but it's topic for another question
更多推荐
发布评论