У меня есть дизайн БД, подобный-
Здесь метаданные - это таблица, которая имеет отношение один-ко-многим с Category_Metadata (для network_type, category_id), а также с Department_Metadata ( по типу сети, отделу). Здесь, поскольку столбец network_type является частью обоих отношений, я получаю ошибку ниже в JPA mapping-
org.hibernate.MappingException: повторяющийся столбец в сопоставлении для объекта: com.sct.model.metadata. Столбец метаданных: тип сети (должен отображаться с помощью вставки = «ложь», обновление = «ложь»)
@Entity(name = "DistributionCenter")
@Table(name = "DC_DIM")
@Getter
@Setter
public class DistributionCenter {
@Id
@Column(name = "dc_nbr")
private Integer dcNbr;
@Column(name = "dc_name")
private String dcName;
}
@Embeddable
@Getter
@Setter
@EqualsAndHashCode
@AllArgsConstructor
public class CategoryId implements Serializable {
@Column(name = "network_type")
@Enumerated(EnumType.STRING)
private NetworkType networkType;
@Column(name = "category_id")
private Integer categoryId;
}
@Entity(name = "Category")
@Table(name = "CATEGORY_METADATA")
public class Category {
@EmbeddedId
private CategoryId id;
@Column(name = "category_name")
private String categoryName;
}
@Embeddable
@Getter
@Setter
@EqualsAndHashCode
@AllArgsConstructor
public class DepartmentId implements Serializable {
@Column(name = "network_type")
@Enumerated(EnumType.STRING)
private NetworkType networkType;
@Column(name = "department_id")
private Integer departmentId;
}
@Entity(name = "Department")
@Table(name = "DEPARTMENT_METADATA")
@Getter
public class Department {
@EmbeddedId
private DepartmentId id;
@Column(name = "department_name")
private String departmentName;
}
@Embeddable
@Getter
@Setter
@EqualsAndHashCode
@AllArgsConstructor
public class MetadataId {
@Column(name = "dc_nbr")
private Integer dcNbr;
@Column(name = "department_id")
private DepartmentId departmentId;
@Column(name = "category_id")
private CategoryId categoryId;
}
@Entity(name = "Metadata")
@Table(name = "METADATA")
@Getter
@Setter
public class Metadata {
@EmbeddedId
private MetadataId MetadataId;
/*@Column(name = "network_type", insertable = false, updatable = false)
@Enumerated(EnumType.STRING)
private NetworkType networkType;*/
@MapsId("dcNbr")
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "dc_nbr")
private DistributionCenter distCenter;
@ManyToOne
@JoinColumns({
@JoinColumn(
name = "network_type",
referencedColumnName = "network_type"),
@JoinColumn(
name = "department_id",
referencedColumnName = "department_id")
})
@MapsId("departmentId")
private Department department;
@ManyToOne
@JoinColumns({
@JoinColumn(
name = "network_type",
referencedColumnName = "network_type"),
@JoinColumn(
name = "category_id",
referencedColumnName = "category_id")
})
@MapsId("categoryId")
private Category category;
}