Сложный первичный ключ с использованием Hibernate с аннотацией - PullRequest
2 голосов
/ 12 мая 2011

Я хотел бы создать собственный идентификатор для объекта в зависимости от значений, уже имеющихся в базе данных.

Я знаю, что было задано несколько вопросов по этому вопросу, но я не могу найти решение ...

Вот мой класс:

@Entity
class A {
    // primary key for table
    @GeneratedValue
    @Id
    private long tableId;

    // id -> should be generated as (1+ (max id of type 'type'))
    @Formula("1+(select t.id from mytable t where t.type=type)") 
    private long id;

    // type 
    private String type;
}         

Я думал о аннотации @Formula, но не могу заставить ее работать ...

Возникло исключение:

java.sql.SQLException: Field 'id' doesn't have a default value 

Я не уверен, что @Formula является хорошим решением ...

Кто-нибудь знает, как я могу заставить его работать?

Спасибомного,

Бен

Ответы [ 2 ]

1 голос
/ 12 мая 2011

попробуйте

@Formula(value = "(select t.id+1 from mytable t where t.type=type)") 
private long id;
0 голосов
/ 26 мая 2011

Я решил свою проблему с помощью аннотации @PrePersist.

@PrePersist
private void generateId() {

    if(id>0){
        return;
    }
    id=++type.lastChronoId;
    type.save();
}

с типом, измененным на класс Type, содержащий индекс последнего созданного объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...