Hibernate 属性映射的列数错误异常播放框架

Hibernate 属性映射的列数错误异常播放框架,hibernate,jpa,playframework,Hibernate,Jpa,Playframework,我是play框架的初学者。再一次关于play框架中的JPA和映射的问题 我有一个学生表和一个导师表,由一对一的关系绑定 学生表: id, name, class, grade 导师表: id, name, department, student_id 在上述情况下,导师可能会也可能不会将学生束缚在自己身上。我正在制作一对一映射的导师模型 @OneToOne @JoinColumn(name="fk_student_id", referencedColumnName="id") private

我是play框架的初学者。再一次关于play框架中的JPA和映射的问题

我有一个学生表和一个导师表,由一对一的关系绑定

学生表:

id, name, class, grade
导师表:

id, name, department, student_id
在上述情况下,导师可能会也可能不会将学生束缚在自己身上。我正在制作一对一映射的导师模型

@OneToOne
@JoinColumn(name="fk_student_id", referencedColumnName="id")
private student Student;
当我试着运行这个时,我得到一个

发生JPA错误(无法构建EntityManagerFactory):属性映射的列数错误:models.Mentor.student类型:models.student

我确信我已经映射了所有学生字段,如下所示

Student.java 我错过了什么

谢谢你抽出时间

问候,,
Abi

您确定这是Play Framework的工作代码吗?在创建模型时,Play和标准JPA之间存在一些差异。这个片段:

@OneToOne
@JoinColumn(name="fk_student_id", referencedColumnName="id")
private student Student;
这是错误的。应该是

@OneToOne
@JoinColumn(name="fk_student_id") //removed the id reference, let JPA manage it
public Student student; //note order of class and var name

此外,您正在定义一个“id”字段,当您从模型进行扩展时,不需要该字段。您是从模型扩展的吗?

如果您想控制您的id和序列策略,您还可以使用
GenericModel

从:

使用GenericModel的自定义id映射
没有任何东西强迫您将实体基于play.db.jpa.Model。您的JPA实体还可以扩展play.db.JPA.GenericModel类。如果您不想将长id用作实体的主键,则需要执行此操作

例如,这里是一个非常简单的用户实体的映射。id是UUID,名称和邮件属性是必需的,我们使用播放验证来强制执行简单的业务规则


@阿披舍克,这是错误的。模型隐式地添加一个id字段。添加自己的id字段可能会导致问题。看,我将删除它并尝试上面的一个。非常感谢
@OneToOne
@JoinColumn(name="fk_student_id") //removed the id reference, let JPA manage it
public Student student; //note order of class and var name
@Entity
public class User extends GenericModel {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
public String id;

@Required
public String name;

@Required
@MaxSize(value=255, message = "email.maxsize")
@play.data.validation.Email
public String mail;
}