Почему hibernate не делает автоинкремент на каскаде?

1

У меня есть два класса, и я пытаюсь выполнить каскадное сохранение-обновление, используя аннотации hibernate и JPA, но когда я пытаюсь сохранить объект Order, я получаю исключение, описанное ниже:

Вот класс Order

@Entity
@Table(name="orders")
public class Order {

    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    private Integer idOc;

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL ,mappedBy = "order")
    @Valid 
    private List<OrderLine> lines = new ArrayList<OrderLine>(Arrays.asList(new OrderLine()));

   // getters and setters
}

И вот мой класс OrderLine

@Entity
@Table(name="orderLines ")
public class OrderLine {

    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    private Integer idOl;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "idOc")
    private Order order;

    // getters and setters
}

Вот исключения, которые я получаю:

1 - org.hibernate.exception.ConstraintViolationException: не удалось выполнить оператор.

2 - Вызвано: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Столбец 'idOl' не может быть нулевым.

IdOl, должно быть, назначается спящим генератором, но каким-то образом он не работает. Есть идеи?

Обновление: на консоли я вижу, что Hibernate выполняет вставку в родительской таблице, но когда он пытается сделать вставку в дочерней таблице, генерируется исключение. Я вижу, что Hibernate не оценивает значение автоинкремента для каждого элемента, содержащегося в List <>, но я не могу понять, почему.

  • 0
    Пожалуйста, обратитесь к stackoverflow.com/questions/18205574/…
  • 0
    Определите @column как недействительный и попробуйте
Показать ещё 2 комментария
Теги:
hibernate

1 ответ

0

Я полагаюсь на реальный объект последовательности DB. например, на уровне класса:

@SequenceGenerator(
    name="SEQ_ORDER",sequenceName="SEQ_ORDER", allocationSize=1, initialValue=1)

И затем используйте ту же последовательность в атрибуте GeneratedValue поля Id. например

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_ORDER")
@Column(name="ID", nullable=false)
protected Integer id;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню