persist()/ merge()在数据库中创建两行的原因是什么?(What can be a reason for persist()/merge() to create two rows in

编程入门 行业动态 更新时间:2024-10-27 18:21:02
persist()/ merge()在数据库中创建两行的原因是什么?(What can be a reason for persist()/merge() to create two rows in database?)

我在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

更多推荐

本文发布于:2023-08-07 22:27:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1466373.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据库中   两行   原因   merge   persist

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!