Как сделать внешний ключ в EmbeddedId для другого объекта с другим EmbeddedId - PullRequest
2 голосов
/ 12 июня 2019

У меня есть класс SWEntity, который занимает центральное место в проблеме.Я хочу набор классов SWEntityRow, который является деталью SWEntity (одна сущность имеет много строк).SWentity имеет в своем ключе два других класса во встроенной области и процедуре.Когда я пытаюсь сопоставить SWEntity с SWEntityRow, используя SWEntityRowId, я получаю разные ошибки.

Какая-то идея, как я могу отобразить SWEntityRowId с SWEntity?

Это упрощенная картина ER: https://i.stack.imgur.com/pMJzh.png

А это мои упрощенные классы:

SWentity
-----------
@Entity
public class SWEntity {

    @EmbeddedId
    private SWEntityId id;
    [...]
}


SWEntityId
-------------
@Embeddable
public class SWEntityId implements Serializable{
    private static final long serialVersionUID = 1L;
    @NotNull
    private String name;
    @NotNull
    private int version;

    @ManyToOne
    @JoinColumn(name = "areaName", nullable = false)
    @JsonIgnore
    private Area area;

    @ManyToOne
    @JoinColumn(name = "procedureName", nullable = false)
    @JsonIgnore
    private Procedure procedure;
}


SWEntityRow
---------------
@Entity
public class SWEntityRow{

    @EmbeddedId
    private SWEntityRowId sWEntityRowId;
}

SWEntityRowId
---------------

@Embeddable
public class SWEntityRowId implements Serializable {

    private static final long serialVersionUID = 1L;

    private String rowName;

    //SWEntityId
    @ManyToOne
    @JoinColumns({
        @JoinColumn(name="name_row", referencedColumnName="name"),
        @JoinColumn(name="version_row", referencedColumnName="version"),
        @JoinColumn(name="area_row", referencedColumnName="area_name"),
        @JoinColumn(name="procedure_row", referencedColumnName="procedure_name"
    })
}

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Это решает мой вопрос

@ JoinColumns({
        @JoinColumn(name="entityname", referencedColumnName="name"),
        @JoinColumn(name="entityversion", referencedColumnName="version"),
        @JoinColumn(name="entityarea", referencedColumnName="AreaName"),
        @JoinColumn(name="entityprocedure", referencedColumnName="ProcedureName")
    })

Разница в referencedColumnName = "AreaName", а не referencedColumnName = "area_name" и то же самое для процедуры.

Спасибо!

1 голос
/ 12 июня 2019

Требуется только одно изменение

@Entity 
public class SWEntity {
  @Id
  @EmbeddedId
  private SWEntityId id;
  [...]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...