0

次のように、プロバイダーと呼ばれる休止状態のエンティティがあります。

@Entity
@Table
public class Provider {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private long id;

    @Column
    private String name;    


    @Column
    private String type;    

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }   

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

タイプに基づいてさまざまなタイプのプロバイダーが含まれています。

  • 学生プロバイダの場合 - タイプは st です
  • コースプロバイダーの場合 - タイプは cp

ここでは、学生プロバイダーとコース プロバイダーの間に多対多の関係を作成する必要があります。そのために、次のように新しいエンティティを作成しました。

public class StudentToCourseProvider {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @ManyToOne
    @JoinColumn(name = "student_id")
    private Provider studentProvider;

    @ManyToOne
    @JoinColumn(name = "course_id")
    private List<Provider> courseProvider;

    public Provider getStudentProvider() {
        return studentProvider;
    }

    public void setClinicalProvider(Provider studentProvider) {
        this.studentProvider = studentProvider;
    }

    public Provider getCourseProvider() {
        return courseProvider;
    }

    public void setCourseProvider(Provider courseProvider) {
        this.courseProvider = courseProvider;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }
}

ID(主キー)なしでStudentToCourseProviderエンティティを作成する必要があります。

4

1 に答える 1

0

考えられるアプローチの1つは、継承を使用することです。

@Entity 
@Inheritence(strategy = InheritenceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public abstract class Provider { ... }

@Entity
@Discriminator("st")
public class StudentProvider extends Provider {
    @ManyToMany
    private List<CourseProvider> courseProviders = ...;
}

@Entity
@Discriminator("cp")
public class CourseProvider extends Provider {
    @ManyToMany(mappedBy = "courseProviders")
    private List<StudentProvider> studentProviders = ...;
}

この場合、クラスtypeからフィールドを削除Providerし、それをディスクリミネーターに変換します。これは、可能なタイプの事前定義されたセットがある場合に機能します。

または、で単一の多対多の関係を作成しProvider、コードで制約を適用することもできます。これは、可能なタイプのセットが不確定な場合に機能します。この場合、関係の直接性に注意する必要があることに注意してください。

于 2012-04-16T09:19:06.290 に答える