спящий режим и триггеры БД - PullRequest
1 голос
/ 04 мая 2011

Я использую спящий режим и триггеры предварительной вставки в базу данных.Позвольте мне объяснить сценарий.У меня есть две таблицы, скажем, A и B. В обеих таблицах первичные ключи вставляются через триггеры предварительной вставки.Первичный ключ от A является внешним ключом в B. Поэтому, когда я вставляю в эти таблицы столбец внешнего ключа в B, он должен заполняться сработавшим значением A (значением первичного ключа).Но это не происходит, как я ожидаю.Первичные ключи в обеих таблицах вставлены правильно, но столбец внешнего ключа продолжает получать значение 0 вместо сработавшего значения, которое он должен фактически получить.Таблица имеет отношение один ко многим.

Две таблицы похожи на -

class Employee {
   private int RECORDID;
   @OneToMany(cascade=cascadeType.ALL)
   @JoinColumn(name="MASTERRECORDID" , referencedColumnName="RECORDID")
   private Collection<EmployeeDetails> employeeDetails = new ArrayList<EmployeeDetails>();
}

class EmployeeDetails{
   private int RECORDID;
   private int MASTERRECORDID;
}

Спасибо

1 Ответ

2 голосов
/ 04 мая 2011

Hibernate не поддерживает первичные ключи, сгенерированные триггерами из коробки.

Вы можете использовать собственный генератор идентификаторов, описанный в Перед вставкой триггера и генератора идентификаторов :

class Employee {
    @Id @GeneratedValue(generator = "trigger_gen")
    @GenericGenerator(name = "trigger_gen", 
        value = "jpl.hibernate.util.TriggerAssignedIdentityGenerator")
    private int RECORDID; 
    ...
}

В качестве альтернативы, если у ваших сущностей есть уникальное поле не-PK, вы можете использовать встроенный генератор select.

Смотри также:

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