属性映射有错误的列数异常 - Play-framework

时间:2011-06-27 03:55:07

标签: hibernate jpa playframework

我是一个有游戏框架的初学者。关于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

@Id @GeneratedValue(strategy=GenerationType.AUTO)
private long id;

@Column(name="name")
private String name;

@Column(name="class")
private String cls;

@Column(name="grade")
private String grade;

我在这里缺少什么?

感谢您的时间。

此致 阿比

2 个答案:

答案 0 :(得分:2)

您确定这是适用于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”字段,从Model扩展时不需要该字段。你是从模型扩展吗?

答案 1 :(得分:0)

如果您想要对您的ID和序列策略进行一些控制,也可以使用GenericModel

来自play official documentation

  

使用GenericModel进行自定义ID映射
  没有什么可以强迫你将你的实体建立在play.db.jpa.Model上。您的JPA实体也可以扩展play.db.jpa.GenericModel类。如果您不想使用Long id作为实体的主键,则需要这样做。

     

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

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