0

我有一个名为 provider 的休眠实体,如下所示,

@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

一种可能的方法是使用继承:

@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 回答