属性映射的列数错误异常-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。导师/学生类型:模特。大学生

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

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;

我在这里错过了什么?

谢谢你抽出时间。

谨致问候,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"字段,在从Model扩展时不需要该字段。你是从Model扩展的吗?

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

来自游戏官方文档:

使用GenericModel的自定义id映射
没有什么可以强迫您将实体建立在play.db.jpa.Model上。您的jpa实体还可以扩展play.db.jpa.GenericModel类。如果您不想使用Long id作为实体的主键,这是必需的。

例如,这里有一个非常简单的用户实体的映射。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;
} 

最新更新