Отношение ManyToOne, где на столбец ссылаются с конкатенацией двух столбцов - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь создать связь ManyToOne между двумя объектами. Таблицы выглядят так:


Table:EQUIPMENT
----------------
ID (Integer PK)    
FIXTURE_NO(Varchar 16)

Table:FIXTURE
----------------
ID(Integer PK)
TNO(Varchar 4)
DNO(Varchar 12)

При создании сущностей я хочу создать отношение много-к-одному, где фикстура No = tNo + dNo (объединение этих двух значений.)

Вот примеры кода моих моделей:

    @Entity
    @Table(name="EQUIPMENT", schema="EQP")
    public class Equipment {

        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @NotNull
        @Column(unique=true)
        private int id;

        @NotNull
        @ManyToOne
        @JoinColumn(name="FIXTURE_NO")
        private Fixture fixture;

        //getters and setters etc...
    }

    @Entity
    @Table(name="FIXTURE", schema="FIX")
    public class Fixture {

        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @NotNull
        @Column(unique=true)
        private int id;

        @Size(max=4)
        @Column(name="TNO")
        private String tNo;

        @Size(max=12)
        @Column(name="DNO")
        private String dNo;

        //getters and setters etc...
    }

Сейчас я вижу, что отображение ManyToOne относится к EQUIPMENT.FIXTURE_NO с FIXTURE.ID, но я не смог найти способ сопоставить объединение TNO и DNO с FIXTURE_NO.

Спасибо за помощь!

1 Ответ

0 голосов
/ 20 июня 2019

Это не будет работать с конкатенацией, но если вы измените свою модель данных на:

Table:EQUIPMENT
----------------
ID (Integer PK)    
TNO(Varchar 4)
DNO(Varchar 12)

Table:FIXTURE
----------------
ID(Integer PK)
TNO(Varchar 4)
DNO(Varchar 12)

Вы можете добавить отношение как это:

@ManyToOne
@JoinColumns({
    @JoinColumn(name="TNO", referencedColumnName="TNO"),
    @JoinColumn(name="DNO", referencedColumnName="DNO")
})
private Fixture fixture;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...