Один и тот же столбец составного ключа используется как внешний ключ для более чем одной таблицы - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть дизайн БД, подобный- enter image description here

Здесь метаданные - это таблица, которая имеет отношение один-ко-многим с 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...