У меня нет ответа на ваш вопрос, но ... почему вы возитесь с "инструментарием", чтобы сделать вашу личную ассоциацию лениво загруженной? Я проверил следующее для взаимно-однозначной связи между классом Foo
и его FooDetail
:
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
public FooDetail getFooDetail() {
return detail;
}
и лени-загрузка просто работает . Это оператор, выполняемый при получении экземпляра Foo
:
Hibernate: select foo0_.id as id45_0_, foo0_.detail_id as detail3_45_0_, foo0_.shortName as shortName45_0_ from Foo foo0_ where foo0_.id=?
А позже, при вызове геттера, FooDetail
извлекается:
Hibernate: select foodetail0_.id as id46_0_, foodetail0_.fullName as fullName46_0_ from FooDetail foodetail0_ where foodetail0_.id=?
И удаление данного Foo
экземпляра также работает отлично, операторы выполняются в правильном порядке:
Hibernate: delete from Foo where id=?
Hibernate: delete from FooDetail where id=?
Ниже DDL, сгенерированный Hibernate для соответствующих таблиц для справки:
create table Foo (id bigint not null, shortName varchar(255), detail_id bigint, primary key (id))
create table FooDetail (id bigint not null, fullName varchar(255), primary key (id))
alter table Foo add constraint FK212C3F68B31178 foreign key (detail_id) references FooDetail
Протестировано с аннотациями Hibernate 3.4.0.GA.
Обновление: Если это не то, что вы ищете, тогда используйте ассоциацию один-ко-многим, есть ограничения с ассоциацией один-к-одному (и, пожалуйста, уточните свой вопрос, читатели не могут догадаться, что ты не пишешь).