我已经使用Netbeans 7.4从数据源创建了实体。
我有一个错误,它发生在所有具有复合主键的实体上。错误如下所示。
我已经在堆栈溢出上搜索了这个问题,这通常是因为人们没有定义连接列。但我已经这样做了。我也不确定netbean生成的代码中如何存在错误。
这是我的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;
缺勤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。日食坚持不懈例外情况。ValidationException异常描述:实体类[class com.fyp.simstest.Existence]中带注释元素[字段时间表]上的@JoinColumns不完整。当源实体类使用复合主键时,必须使用@JoinColumns为每个连接列指定@JoinColumn。必须在每个这样的@JoinColumn中指定name和referencedColumnName元素。位于组织。日食坚持不懈例外情况。ValidationException。未指定完整的JoinColumns(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;
}
编辑两个
考虑一下这一点:
@JoinColumn(name = "TimeTable_Period", referencedColumnName = "Period")
private Timetable timetable;
您已经在您的时间表实体中引用了时段一栏。但是在时间表上。java我没有看到任何与表中的时段列映射的字段。
例如:
@Id // as its the primary key!
@Column(name="Period")
private Long period
对于您在@ManyToOne
映射中使用的其他引用实体,这应该是相同的。
您的图表指示TimeTable
表有一个由三列组成的主键(周期
、日
和Class_idClass
)。您需要向添加一个注释bsence.time表
,如下所示:
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;
...
}
我对JavaEE(和Netbeans)是新手。我正在尝试从我的mysql数据库自动生成实体类。。。对于简单的关系,它是有效的,但对于以下情况,它总是失败的: 我得到以下错误: 内部异常:异常[EclipseLink-7220](Eclipse持久性服务-2.3.2.v20111125-r10461):org。日食坚持不懈例外。ValidationException异常描述:实体类[class en
我在netbeans中创建了一个桌面应用程序,到昨天为止还很好,但现在需求发生了变化,客户机希望所有的JTextField都是自动完成的,源码是databse,我搜索并试图找到任何适合netbeans的例子,但我无法找到这样的东西,所以请帮助我如何在netbeans中实现自动完成的东西?请帮忙
问题内容: 我正在使用JPA(Hibernate的实现)来注释实体类,以将其持久化到关系数据库(MySQL或SQL Server)。有没有一种简单的方法可以从带注释的类自动生成数据库模式(表创建脚本)? 我仍处于原型制作阶段,并期望频繁的模式更改。我希望能够从带注释的代码中指定和更改数据模型。Grails的相似之处在于它从域类生成数据库。 问题答案: 您可以使用Hibernate中的hbm2ddl
本文向大家介绍springboot+mybatis通过实体类自动生成数据库表的方法,包括了springboot+mybatis通过实体类自动生成数据库表的方法的使用技巧和注意事项,需要的朋友参考一下 前言 本章介绍使用mybatis结合mysql数据库自动根据实体类生成相关的数据库表。 首先引入相关的pom包我这里使用的是springboot2.1.8.RELEASE的版本 添加数据库配置文件ap
我为我的系统创建了一些报告,该报告由许多表组成。为此,我创建了一个带有@Entity注释的域类,并实现了一个JpaRepository存储库,我将本机查询与@query一起使用,如下所示。 我的问题是,对于每个域类,hibernate都在创建一个表,如何停止它? 我的域类: 我的存储库:
我们计划使用液基作为我们的数据库脚本自动化工具,用于维护和应用 ddl 和 dml。 是否有任何库可以读取liquibase配置中定义的ddl并生成jpa实体java类?