Hibernate Аннотации - идентификатор не установлен правильно - PullRequest
0 голосов
/ 19 октября 2010

У меня есть целая куча Java-бинов, аннотированных вот так JPA:

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class TitleEntry extends Entry {
    private Long id;

    public TitleEntry() { }

    public TitleEntry(String code, String label) {
        super(code, label);
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }

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

Идентификатор всегда генерируется таким образом для каждого объекта и, кажется, работает нормально.

Теперь проблема: Когда я сохраняю объект в Java:

dao.save(titleEntry);

для свойства id компонента устанавливается значение int, которое не соответствует фактическому идентификатору. Это соответствует hibernate_sequence (я думаю).

Вопросы:

  1. Почему?
  2. Что такое hibernate_sequence (не могу найти достойного объяснения на веб-сайте Hibernate)?
  3. Как я могу это исправить?

Примечание: я использую Java 1.6, MSSQL2005, Hibernate3

Ответы [ 2 ]

1 голос
/ 19 октября 2010

Почему?

Не знаю, предыдущий абзац о каком-то "фактическом идентификаторе" не имеет никакого смысла.Вы можете уточнить?Также может помочь показ структуры вашей таблицы TitleEntry.

Что такое hibernate_sequence в любом случае (не удается найти достойное объяснение на веб-сайте Hibernate)?

Имя по умолчанию для последовательности или таблицы, используемой Hibernate (см. 5.1.5. Генераторы улучшенных идентификаторов ).Учитывая, что SQL Server не поддерживает последовательность, я бы сделал ставку на позже.Вы должны проверить сгенерированный DDL, чтобы точно узнать, что было сделано (и показать соответствующую часть).

Но я удивлен, что Hibernate по умолчанию не установил IDENTITY (какую версию Hibernate вы используетеименно так?).

Как я могу это исправить?

Я не знаю, что вы хотите исправить, но если вы хотите полного контроля, не используйте стратегию AUTO(IDENTITY обычно с SQL Server).

1 голос
/ 19 октября 2010

Попробуйте указать SequenceGenerator, используя соответствующую аннотацию:

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
@SequenceGenerator(name = "myGen", sequenceName = "MY_SEQUENCE")
public Long getId() 
{
    return id;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...