EmbeddedId, последовательность и ConstraintViolationException - PullRequest
0 голосов
/ 30 ноября 2011

У меня есть сущность с @EmbeddedId.В классе id есть несколько полей, одним из которых является Long id с последовательностью типа Generation.Проблема возникает, когда я пытаюсь вставить экземпляр этой сущности, не устанавливая идентификатор в встроенный идентификатор (который должен быть вставлен здесь из последовательности).

org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update

Когда для идентификатора в этом внедренном идентификаторе установлено любое значениеВставка прошла успешно.

Что я могу сделать, чтобы это заработало?

Редактировать: код

@Entity
@Table(name = "TestIds")
public class TestIds implements Serializable {

    @EmbeddedId
    private TestId testId;

    public TestIds(TestId testId) {
        this.setTestId(testId);
    }

    public TestId getTestId() {
    return testId;
    }

    public void setTestId(TestId testId) {
    this.testId = testId;
    }   
}

@Embeddable
public class TestId implements Serializable {

    private static final long serialVersionUID = 1L;
    @GeneratedValue(strategy=GenerationType.AUTO, generator="my_entity_seq_gen")
    @SequenceGenerator(name="my_entity_seq_gen", sequenceName="MY_ENTITY_SEQ")
    @Column(name = "column_name")
    private Long id;

    public TestId() {

    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

Я выполняю

TestIds a = new TestIds(new TestId());
Session session = sessionFactory.getCurrentSession();

session.save(a);
session.flush();

org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update

Caused by: 
java.sql.BatchUpdateException: Batch entry 0 insert into TestIds (column_name) values (NULL) was aborted

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

Кажется, что невозможно использовать @GeneratedValue в @ EmbeddedId

0 голосов
/ 30 ноября 2011

Вы должны добавить аннотацию @GeneratedValue к идентификатору и выбрать поведение по вашему выбору.

, например, отредактировано по ошибке @ Id

@GeneratedValue(strategy=GenerationType.AUTO, generator="my_entity_seq_gen")
@SequenceGenerator(name="my_entity_seq_gen", sequenceName="MY_ENTITY_SEQ")
@Column(name = "column_name")
private Long id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...