我正在为 Play 使用一个非常简单的类来尝试 JPA!框架,我在使用 id 列时遇到了一些问题。
我的sql数据库只有两列:
CREATE TABLE IF NOT EXISTS `auto` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
)
我的模型是:
@Entity
@Table(name = "auto")
public class Auto extends Model{
@Column(insertable = false, updatable = false)
public int id;
public String name;
public Auto(String name){
this.name = name;
}
}
没有这部分一切正常:
@Column(insertable = false, updatable = false)
public int id;
只要我添加 public int id;
我就会收到此错误:发生 JPA 错误(无法构建 EntityManagerFactory):实体映射中的重复列:模型。自动列:id(应该用 insert="false"update="false"映射)
这就是我添加列注释的原因,但它也不起作用,现在我得到:
已捕获 javax.persistence.PersistenceException,org.hibernate.PropertyAccessException:无法通过 models.Auto.id 的反射 setter 设置字段值
我正在以这种方式测试模型:new Auto("bmw").save();
save() 是 playframework 模型类中的一个方法。
有人知道我为什么会遇到这个问题吗?谢谢!
最佳答案
嗯,完全没有 id 字段试试吧。看起来如果扩展 Model 类,Playframework 会自动创建一个 Id 字段。参见 here :
“... 如果您以前使用过 JPA,就会知道每个 JPA 实体都必须提供一个 @Id 属性。这里的 Model 父类(super class)提供了一个自动生成的数字 ID,在大多数情况下这已经足够了。 ……”
关于java - id 列和 JPA 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6015420/