나는 JavaEE에서 나의 두 번째 프로젝트를 시작하고, 미래의 디버그 목적을 위해 데이터베이스의 일부 데이터를 초기화하기 위해 간단한 싱글 톤 빈을 만들었다. 그러나, 나는 이상한 문제에 갇혀있다 - 영원한 방법 (뿐만 아니라 병합) 데이터베이스에 두 개의 행을 만듭니다. 내가하는 모든 일이있다 :persist()/merge()가 데이터베이스에 두 개의 행을 생성하는 이유는 무엇입니까?
@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);
}
}
을 그리고이 같은 영화의 실체가 모습입니다 : 나는이 문제를 인터넷 검색을 시도
@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
...
}
하지만이 일어날 것 같으면 사람들이 엉망 JPA의 관계를하지만, 우리가 볼 수 있듯이 이것은 가장 간단한 경우입니다. 물론 영화 10 편을 만들면 JPA는 20 행을 생성합니다.
EclipseLink를 JPA 제공 업체로 사용하는 Glassfish (Payara)를 사용하고 있으며, Oracle 11g는 전혀 문제가 없다면 Oracle 데이터베이스가 내 데이터베이스입니다. 내 디자인에 잠재적 인 문제가 있는지 알지 못하기 때문에이를 해결하는 방법을 모릅니다.
_initDatabase_ 메서드가 두 번 호출되지 않았습니까? –
네, 저 자신을 부르지 않고 있습니다. 아직 전화 할 길이 없습니다. – newfolder
나는 당신이 그것을 부르고 있었다고 말하지 않았다, 나는 당신에게 그것이 두 번 호출되지 않는다는 것을 확인하도록 요청했다. (디버거, 로그 문 등을 통해 확인할 수있다.) –