我使用Netbeans 7.4從數據源創建實體。自動生成的實體類的Netbeans @JoinColoumns錯誤
而且我有一個錯誤,它出現在具有複合主鍵的所有實體中。錯誤可以在下面看到。
我已經在堆棧溢出中搜索了這個問題,它通常是因爲人們還沒有定義連接列。但我已經完成了。我也不確定netbeans生成的代碼中存在錯誤。
這裏是我的MySQL數據庫的形象,我正向設計來創建這些實體來說:
任何幫助將不勝感激!
這裏是唯一的相關代碼
缺席實體:
public class Absence implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected AbsencePK absencePK;
@Basic(optional = false)
@NotNull
@Column(name = "idAbsence")
private int idAbsence;
@Basic(optional = false)
@NotNull
@Column(name = "Date")
@Temporal(TemporalType.DATE)
private Date date;
@Size(max = 35)
@Column(name = "type")
private String type;
@Lob
@Size(max = 65535)
@Column(name = "remark")
private String remark;
@JoinColumn(name = "TimeTable_Period", referencedColumnName = "Period", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Timetable timetable;
@JoinColumn(name = "Student_idStudent", referencedColumnName = "idStudent", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Student student;
@JoinColumn(name = "Class_idClass", referencedColumnName = "idClass", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Class class1;
AbsencePK實體:
@Embeddable
public class AbsencePK implements Serializable {
@Basic(optional = false)
@NotNull
@Column(name = "Class_idClass")
private int classidClass;
@Basic(optional = false)
@NotNull
@Column(name = "Student_idStudent")
private int studentidStudent;
@Basic(optional = false)
@NotNull
@Column(name = "TimeTable_Period")
private int timeTablePeriod;
public AbsencePK() {
}
public AbsencePK(int classidClass, int studentidStudent, int timeTablePeriod) {
this.classidClass = classidClass;
this.studentidStudent = studentidStudent;
this.timeTablePeriod = timeTablePeriod;
}
錯誤:
所致:異常[的EclipseLink-7220](Eclipse持久服務 - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.ValidationException 異常描述:@JoinColumns上來自實體類[class com.fyp.simstest.Absence]的註釋元素[field timetable]不完整。 當源實體類使用複合主鍵時,必須使用@JoinColumns爲每個連接列指定@JoinColumn。 名稱和referencedColumnName元素都必須在每個這樣的@JoinColumn中指定。 在org.eclipse.persistence.exceptions.ValidationException.incompleteJoinColumnsSpecified(ValidationException.java:1847)
EDIT
時間表
@Entity
@Table(name = "timetable")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Timetable.findAll", query = "SELECT t FROM Timetable t"),
@NamedQuery(name = "Timetable.findByPeriod", query = "SELECT t FROM Timetable t WHERE t.timetablePK.period = :period"),
@NamedQuery(name = "Timetable.findByDay", query = "SELECT t FROM Timetable t WHERE t.timetablePK.day = :day"),
@NamedQuery(name = "Timetable.findByClassidClass", query = "SELECT t FROM Timetable t WHERE t.timetablePK.classidClass = :classidClass")})
public class Timetable implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected TimetablePK timetablePK;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "timetable")
private Collection<Absence> absenceCollection;
@JoinColumn(name = "Class_idClass", referencedColumnName = "idClass", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Class class1;
public Timetable() {
}
public Timetable(TimetablePK timetablePK) {
this.timetablePK = timetablePK;
}
TimetablePK
Embeddable
public class TimetablePK implements Serializable {
@Basic(optional = false)
@NotNull
@Column(name = "Period")
private int period;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "Day")
private String day;
@Basic(optional = false)
@NotNull
@Column(name = "Class_idClass")
private int classidClass;
public TimetablePK() {
}
public TimetablePK(int period, String day, int classidClass) {
this.period = period;
this.day = day;
this.classidClass = classidClass;
}
編輯兩個
@Brawn這是一個史詩般的失敗,當你在一列使用@ Basic和@NotNull @ Basic。你可以通過這樣做@Column(name =「」,nullable = false) – solvator
實際上它不會失敗。例如@NotNull可以被'bean validation'使用,而'nullable = false'則不能。儘管您可以跳過'Basic'並在'Column'註釋中將'optional = false'轉換爲'nullable = false' –