Я пытаюсь создать две сущности в 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;
}