OneToMany
열이 이미있는 클래스에 OneToMany
열을 추가 할 때 EntityManager를 인스턴스화 할 수 없다는 데 어려움을 겪고 있습니다.OneToMany 주석을 추가 할 때 EntityManager가 JPA/Hibernate를 사용하여 인스턴스 화하지 못함
지금은 EducationInfo
이 사용자에게 입니다. 각 행은 사용자에게 고유하므로 사용자 이름이 지정된 모든 교육 정보를로드 할 수 있기를 원합니다.
열을 추가 할 때 orm.xml 파일을 변경하지 않고 다시 만들 수 있도록 데이터베이스를 삭제합니다. 나는 마지막 열을 포함하지 않는 경우
class User {
@Id
@GeneratedValue(){val strategy = GenerationType.AUTO}
var id : Int = _
@Column{val nullable = false, val length=32}
var firstName : String = ""
var lastName : String = ""
@Column{val nullable = false, val unique = true, val length = 30}
var username : String = ""
@OneToMany{val fetch = FetchType.EAGER, val cascade=Array(CascadeType.ALL)}
var address : java.util.List[Address] = new java.util.ArrayList[Address]()
@OneToMany{val fetch = FetchType.EAGER, val cascade=Array(CascadeType.ALL), val mappedBy="user"}
var educationInfo : java.util.List[EducationInfo] = new java.util.ArrayList[EducationInfo]()
는 내 단위 테스트는 잘 작동하지만 다음이 포함 된 경우 내 모든 단위 테스트가 실패합니다. 여기
는 사용하려고하는 클래스이며,이 클래스의 단위 테스트는 잘 작동 :@Entity
@Table{val name="educationinfo"}
class EducationInfo {
@Id
@GeneratedValue(){val strategy = GenerationType.AUTO}
var id : Long = _
@Column{val nullable = false, val length = 100}
var name : String = "";
@OneToOne{val fetch = FetchType.EAGER, val cascade = Array(CascadeType.PERSIST, CascadeType.REMOVE)}
@JoinColumn{val name = "educationinfo_address_fk", val nullable = false}
var location : Address = _
@ManyToOne{val fetch = FetchType.LAZY, val cascade=Array(CascadeType.PERSIST)}
@JoinColumn{val name = "educationinfo_user_fk", val nullable = false}
var user : User = _
@Column{val nullable = false, val length = 100}
var degree : String = ""
@Temporal(TemporalType.DATE)
@Column{val nullable = true}
var startyear : Date = new Date()
var endyear : Date = new Date()
@Column{val nullable = true, val length = 1000}
var description : String = ""
}
가 나는 또한 궁금 오류가가를 방지 무엇인지 알아야 할 방법이 있는지 EntityManager가 인스턴스화되지 않지만 주요 문제점은 사용자에게이 열을 추가 할 때 문제를 일으킬 수있는 것입니까?
업데이트 :
에 오류가 일부를 제거.
UPDATE 2 :
나는 @ManyToOne
를 할 교육 기관에서 사용자 열을 변경 내 모든 단위 테스트에 실패했습니다.
내 오류 로그의 끝
은 이것이다 :15035 [main] INFO org.hibernate.cfg.SettingsFactory - Default entity-mode: pojo
15035 [main] INFO org.hibernate.cfg.SettingsFactory - Named query checking : enabled
15047 [main] INFO org.hibernate.impl.SessionFactoryImpl - building session factory
[PersistenceUnit: jpaweb] Unable to build EntityManagerFactory
[PersistenceUnit: jpaweb] Unable to build EntityManagerFactory
는 다음의 EntityManager는 모든 테스트에서 null의 경우, 그래서 실패합니다.
UPDATE 3 : 그것은 여러 단체에서 호출로
Address
실체가 무엇이든에는 외래 키가 없습니다.
Apache Derby를 데이터베이스로 사용하면이 문제가 발생할 수 있습니까?
불행히도 오류 메시지가 표시되지 않습니다. 나는 이것을 Maven 내에서 실행하는데, 비록 그것이 일어난다는 것을 알 수 없을 때마다 나는 데이터베이스를 삭제한다. EducationInfo -> User의 @ManyToOne은 문제를 일으키지 않지만 User의 @OneToMany -> EducationInfo는 않습니다.
는 UPDATE 4 : 제안
나는 사용자 개체에 mappedBy을 추가했다. 나는 다른 컬럼 정의에서, 나는 작동하지 않을 다섯 가지 정의가 있었고, 나는 그들이 모두 같은 이유로 존재한다고 믿었 기 때문에 하나만 가지고 테스트했습니다. 불행히도 여전히 EntiyManagerFactory가 생성되지 않기 때문에 모든 테스트가 실패합니다.
최종 업데이트 :
는 실제 사건은
동시에 여러 가방 그래서 난 그냥 EducationInfo에서 완전히 FetchType을 제거를 가져올 수 없습니다이었고, 문제는 멀리 갔다. 이
OneToOne
을하지 수 연결의 반대편에
실제 오류/스택 추적을 인쇄 할 수 있었습니까? 여기에 다소 생선이 보이는 것은'EducationInfo'에서'Address'까지의'@ OneToOne'이지만 FK를 통해 매핑되기 때문에 문제가되어서는 안됩니다. 'Address'는'@ OneToOne' 매핑을 가지고 있습니까? 여기서 Hibernate의 에러 메시지를 프린트하는 것이 가장 중요하다. 에러를 찾을 곳을 알려줄 것이다. – ChssPly76
stacktrace를 얻을 수 있으면 좋겠지 만 얻는 방법을 모르겠습니다. –
@OneToMany에'mappedBy'가 설정되어 있지 않다는 사실을 눈치 채 셨습니다 (주석은 스칼라에서 다소 다르게 보입니다). 'mappedBy = "user"'- 이는'EducationInfo' 테이블에 의해 연관이 유지된다는 것을 의미합니다. – ChssPly76