Я пытаюсь создать экземпляр EntityManager, если я добавлю столбец OneToMany
классу, который уже имеет столбец OneToMany
.EntityManager не может создать экземпляр, используя JPA/Hibernate, когда добавляю аннотацию OneToMany.
Сейчас у EducationInfo
есть пользователь OneToOne
, так как каждая строка будет уникальной для человека, но я хочу, чтобы иметь возможность загружать всю информацию об образовании с указанием имени пользователя.
Я не изменяю файл 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 от экземпляра, но основная проблема заключается в том, что может вызвать проблему, когда я добавляю этот столбец в User?
UPDATE:
Удалены часть, которая была ошибкой.
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 равно нулю во всех тестах, так что не удается.
UPDATE 3:
Address
предприятие не имеет внешних ключей ни к чему, так как она вызывается из нескольких лиц.
Возможно, эта проблема возникла из-за использования Apache Derby в качестве базы данных?
К сожалению, у меня нет сообщений об ошибке. Я запускаю это изнутри maven, и хотя я удаляю базу данных каждый раз, когда я не могу сказать, что это происходит, это неправильно. @ManyToOne из EducationInfo -> Пользователь не вызывает никаких проблем, но @OneToMany -> EducationInfo от пользователя.
UPDATE 4:
Я добавил mappedBy к объекту пользователя, как предложено. У меня было это в другом определении столбца, так как у меня есть пять определений, которые не будут работать, и я считаю, что они все по той же причине, поэтому я просто тестирую их. К сожалению, это все еще приводит к тому, что EntiyManagerFactory не строится, поэтому все тесты терпят неудачу.
FINAL UPDATE:
Фактический случай был
не может одновременно получать несколько мешков
так что я просто удалил FetchType полностью из EducationInfo и проблема ушла. отображение дополнение
Были ли вы распечатаны фактическая трассировка ошибок/стека? Единственное, что выглядит несколько подозрительно, это '@ OneToOne' от' EducationInfo' до 'Address', но это не должно быть проблемой, поскольку он отображается через FK. Имеет ли 'Адрес' какие-либо сопоставления' @ OneToOne'? Получение сообщения об ошибке Hibernate для печати наиболее важно здесь, оно покажет вам, где искать ошибку. – ChssPly76
Мне жаль, что я не могу получить стек, но я не понимаю, как его получить. –
Я только заметил (аннотации выглядят несколько иначе в Scala), что у вас нет 'mappedBy', установленного на @OneToMany. Вы должны: 'mappedBy =" user "' - это означало бы, что ассоциация поддерживается таблицей «EducationInfo». – ChssPly76