当前位置: 首页 > 知识库问答 >
问题:

自动生成实体类的Netbeans@JoinColoumns错误

乔俊才
2023-03-14

我已经使用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;
    }

编辑两个

共有2个答案

连德水
2023-03-14

考虑一下这一点:

@JoinColumn(name = "TimeTable_Period", referencedColumnName = "Period")
private Timetable timetable;

您已经在您的时间表实体中引用了时段一栏。但是在时间表上。java我没有看到任何与表中的时段列映射的字段。

例如:

@Id // as its the primary key!
@Column(name="Period")
private Long period

对于您在@ManyToOne映射中使用的其他引用实体,这应该是相同的。

戚俊人
2023-03-14

您的图表指示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类?