Hibernate - объединяет только один столбец вместо целого объекта

У меня есть класс, и мне нужен только один столбец из другого сопоставленного объекта. Я бы предпочел отказаться от полной ссылки. Есть ли способ сделать это? Я исчерпывающе погуглил, но у меня не должно быть правильной терминологии.

Разъяснение:

@Entity
@Table(name = "foo")
@Data
public class Foo {
    @Id
    @Column(name = "itemid")
    private long id;

    @Column(name = "name")
    private String name;
}

Это работает:

@Entity
@Table(name = "bar")
@Data
public class Bar{
    @Id
    @Column(name = "itemid")
    private long id;

    @Column(name = "other_name")
    private String otherName;

    @OneToOne
    @PrimaryKeyJoinColumn
    private Foo foo;
}

Но я хочу:

@Entity
@Table(name = "bar")
@Data
public class Bar{
    @Id
    @Column(name = "itemid")
    private long id;

    @Column(name = "other_name")
    private String otherName;

    @OneToOne
    @JoinColumn(name = "itemid")
    @Formula("SELECT name FROM FOO v where v.id = id")
    // Something here...not sure what. Where name is the name from Foo
    private String name;
}

2 ответа

Решение

У вас есть пара вариантов.

Во-первых, как вы намекаете, использовать @Formula - без других аннотаций, которые у вас есть, просто используя @Formula, Это должно делать именно то, что вы ожидаете.

В качестве альтернативы, если вам часто это нужно, вы можете создать представление, которое объединит два столбца, и ваш объект будет основан на этом представлении, а не на исходных таблицах.

Я считаю, что вы не должны этого делать. Ваш класс сущности должен описывать только то, как хранятся данные. Вы добавляете некоторую логику там, где ее не должно быть.

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

Другие вопросы по тегам