gpt4 book ai didi

java - 自动生成的实体类出现 Netbeans @JoinColoumns 错误

转载 作者:行者123 更新时间:2023-11-29 13:12:22 24 4
gpt4 key购买 nike

我使用 Netbeans 7.4 从数据源创建实体。

所有具有复合主键的实体都会出现错误。错误如下所示。

我在堆栈溢出上搜索过这个问题,通常是因为人们没有定义连接列。但我已经做到了。我也不确定 netbeans 生成的代码中如何存在错误。

这是我的 MySQL 数据库的图像,我对其进行了正向设计以创建这些实体:

任何帮助将不胜感激!

enter image description here

这里是唯一相关的代码

缺席实体:

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;

缺席PK实体:

@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异常描述:实体类[class com.fyp.simstest.Absence]中带注释的元素[字段时间表]上的@JoinColumns不完整。当源实体类使用复合主键时,必须使用@JoinColumns为每个连接列指定@JoinColumn。必须在每个这样的@JoinColumn 中指定名称和referencedColumnName 元素。在 org.eclipse.persistence.exceptions.ValidationException.incompleteJoinColumnsSpecified(ValidationException.java:1847)

编辑

时间表

@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;
}

时间表PK

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;
}

编辑两个

最佳答案

您的图表表明 TimeTable 表的主键由三列组成(PeriodDayClass_idClass)。您需要向 Absence.timeTable 添加一个注释,如下所示:

public class Absence implements Serializable {
...
@JoinColumns[
@JoinColumn(name = "TimeTable_Period", referencedColumnName = "Period", ...),
@JoinColumn(name = "????", referencedColumnName = "Day", ...),
@JoinColumn(name = "Class_idClass", referencedColumnName = "Class_idClass", ...)
]
@ManyToOne(optional = false)
private TimeTable timeTable;
...
}

关于java - 自动生成的实体类出现 Netbeans @JoinColoumns 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21910968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com