У меня есть следующий простой пример. Когда он запускается, я вижу, что объект QuoteRequest генерируется с автогенерированным идентификатором. Далее, я вижу Аварии объект генерируется, но quote_request_id, который вставляется пустой, так что я получаю сообщение об ошибке:Hibernate @OneToMany пытается вставить нуль
Column «quote_request_id» не может быть пустым
@Entity
@Table(name = "Quotes")
public class QuoteRequest
{
public QuoteRequest(){}
@Id
@Column(name = "quote_request_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long QuoteRequestId;
@OneToMany(mappedBy = "quoteRequest", cascade = CascadeType.ALL)
@OrderColumn(name = "accidents_id")
private Accidents[] accidents;
// Getters and setters
}
@Entity
@Table(name = "Accidents")
public class Accidents
{
public Accidents()
{
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "accidents_id")
private long AccidentId;
@Column(name = "amount", nullable = false)
private Float amount;
@ManyToOne(optional = false, cascade = CascadeType.ALL)
@JoinColumn(name = "quote_request_id", nullable = false)
private QuoteRequest quoteRequest;
// Getters and setters
}
Почему не он вставляет вновь сгенерированный идентификатор в столбец аварий?
Это выглядит странно. По вашей конфигурации, когда вставлен «Несчастный случай», он должен содержать «quote_request_id» вставить вместе. Могу ли я узнать, какую версию Hibernate вы используете? И что еще более важно: для созданного вами объекта «Аварии» вы действительно настроили его «quoteRequest» правильно? (Мне жаль, что вы не устанавливаете «аварии» на стороне «QuoteRequest», но забыли «quoteRequest» на стороне «Несчастные случаи», так как последняя сторона, которая владеет этим отношением). Одна проблема OT: вы должны называть ее «Авария» вместо «Несчастных случаев», поскольку она представляет собой только один случай. –
Я использую Hibernate. 4.3.9.Final Я не назначаю quoteRequest о авариях явно. Я создаю Аварии, добавляя их в QuoteRequest. При создании аварий я не устанавливаю свойство quoteRequest. Должен ли я что-то делать с этим? Нужно ли иметь двунаправленные отношения? Хороший призыв к наименованию. Я не придумал это, но я застрял с ним сейчас :) –
Тогда в этом проблема. Дам вам ответ –