Присоединение к объекту на основе связанного внешнего ключа с использованием Hibernate - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь создать две сущности в java-программе, над которой я работаю, которые объединены. У меня есть две таблицы, назовем их SUB_AREA и LOCATION, которые соединяются друг с другом. Обе таблицы заполняются методом .findById(id) стандарта JpaRepositoryBroker, поэтому все поля соответствуют столбцам в базе данных.

Таблица SUB_AREA присоединяется к таблице LOCATION, где:

LOCATION.LOCATION_ID = CONCAT(SUB_AREA.AREA_ID, SUB_AREA.SUB_AREA_ID)

так что если:

LOCATION.LOCATION_ID = 1234

Тогда:

SUB_AREA.AREA_ID = 12

SUB_AREA.SUB_AREA_ID = 34

Обычно я присоединяюсь к чему-то вроде этого:

@JoinColumn(name = "ID", referencedColumnName = "LOCATION_ID")

Но мне нужно что-то еще вроде:

@JoinColumn(name = "DPOT_ID" + "SUB_DPOT_NBR", referencedColumnName = "ENTY_CDE")

Есть ли способ использовать hibernate / javax для обработки этого типа соединения с внешним ключом? Я не могу внести изменения в саму базу данных.

Вот макет кода, который я описываю:

SUB_AREA:

@Builder
@Entity
@Table(name = "SUB_AREA", schema = "AREA")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SubAreaEntity {

    @EmbeddedId
    private SubAreaEntityPk pk;

    @ManyToOne
    @JoinColumn(name = "ID", referencedColumnName = "LOCATION_ID") // what to do here?
    @NotFound(action = NotFoundAction.IGNORE)
    private LocationEntity locationEntity;
}

SUB_AREA закрытый ключ:

@Builder
@Embeddable
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
class SubAreaEntityPk implements Serializable {

    @Column(name = "AREA_ID", nullable = false, length = 2)
    private String areaId;

    @Column(name = "SUB_AREA_ID", nullable = false, length = 2)
    private String subAreaId;

}

РАСПОЛОЖЕНИЕ:

@Builder
@Entity
@Table(name = "LOCATION", schema = "AREA")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class LocationEntity {

    @Id
    @Column(name = "LOCATION_ID", nullable = false)
    private String locationId;

}
...