Сопоставление Hibernate @OneToOne с предложением @Where

Будет ли это работать -

@OneToOne()
@JoinColumn(name = "id", referencedColumnName = "type_id")
@Where(clause = "type_name = OBJECTIVE")
public NoteEntity getObjectiveNote() {
  return objectiveNote;
}

Это то, что я пытаюсь сделать - получить запись из таблицы note, type_id которой является id текущего объекта, а type_name - OBJECTIVE.

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


person nuaavee    schedule 08.12.2010    source источник
comment
ЦЕЛЬ это константа или атрибут?   -  person Mohamed Saligh    schedule 08.12.2010
comment
Вам нужно показать NoteEntity. Кроме того, попробуйте настроить <property name="show_sql">true</property>, чтобы увидеть, что содержится в SQL.   -  person Adeel Ansari    schedule 08.12.2010


Ответы (2)


Это просто не работает, извините :( Вам нужно будет сделать это как один ко многим и жить с получением коллекции с одним элементом.

Если вы действительно хотите, чтобы это работало таким образом, вы можете обмануть спящий режим, сохранив идентификатор внешнего ключа и имя_типа в таблице соединений и сообщив ему, что оба столбца составляют внешний ключ.

person Affe    schedule 08.12.2010
comment
Хорошо, как? Вариант №2 - person Christian Bongiorno; 04.05.2016
comment
@Affe Я могу подтвердить этот первый вариант, изменив объект на список и выполнив onetomany (даже если дизайн onetoone), тогда получение одного элемента работает нормально. Спасибо - person rpajaziti; 17.04.2020

На самом деле вы можете добиться этого, указав @OneToOne без каких-либо @Where, но поместив @Where в указанный класс сущности. Я тестировал это на Hibernate 4.3.11.

Это работает, если вам не нужны какие-либо объекты сущностей, которые не соответствуют вашему @Where.

Если вы действительно заботитесь о других объектах, возможно, вы можете создать объект подкласса, добавить к нему @Where и присоединиться к этому подклассу. Но я не тестировал этот сценарий.

person vadipp    schedule 27.10.2017