Спящий режим Много к одному Сопоставление с различным количеством столбцов

Привет, у меня есть 2 таблицы ниже

Table1:

    +-------------------+
    | ID  LOB col1 col2 |
    +-------------------+

Первичный ключ (ID и LOB)

Table2:

    +-----------------+
    | SK ID col3 col4 |
    +-----------------+

Первичный ключ (SK)

I нужно дать много одного отношения из таблицы 2 в таблицу1, так как table1 имеет compositePrimaryKey (ID и LOB), но table2 не имеет любого столбца, связанного с LOB. Я не могу предоставить отображение. Пожалуйста, помогите в этом.

EDIT Я пробовал сопоставление спящего режима для Table2:

<many-to-one name="class1Obj" class="com.acs.enterprise.common.Class1" 
            lazy="proxy" insert="false" update="false">
    <column name="ID" />
    <column name="LOB" />
</many-to-one>

Вышеуказанное не работает. При извлечении записи он пытается получить код LOB из таблицы2, который вообще не существует в таблице 1

Ответ 1

Предполагая, что table2.SK является FK до table1.ID и нет записей table1, имеющих один и тот же идентификатор, вы можете записать отображение следующим образом:

@ManyToOne
@JoinColumn(name = "ID", insertable = false, updatable = false)
private Class1 class1Obj;

Если есть больше строк table1 с одинаковым идентификатором, сопоставление не будет выполнено, потому что дочерний элемент будет сопоставлен с несколькими родителями.

Итак, для правильной ассоциации many-to-one вам нужен FK для столбца родителя, который уникален.

Ответ 2

Hibernate @Id не обязательно должен соответствовать реальному основному ключу базы данных (хотя желательно, чтобы они совпадали, конечно).

Если ID является уникальным столбцом в Table1, тогда сопоставьте идентификатор Hibernate только с ним и оставьте LOB как просто обычное поле.

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

Ответ 3

@Entity
@Table(name="Table_name")
public class table_name {
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "id1", column = @Column(name = "col1")),
@AttributeOverride(name = "id2", column = @Column(name = "col2")) })