java - id 列和 JPA 的问题

标签 java hibernate jpa playframework

我正在为 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/

相关文章:

java - 生成的查询中的 Hibernate SQL 错误(可能是映射错误)

java - 在非主键列上使用 Hibernate Criteria 进行内部连接

java - EntityManager..getResultList() 中的 ArrayIndexOutOfBoundsException

java - 使用 Spring 的 JPA 存储库进行计数器

java - 返回数据类型不匹配

java - 从带有偏移值的日期获取时区信息

java - Spring 启动 : Using a @Service in Quartz job execution

验证错误 : Value is not valid

java - 如何以 RxJava2 的方式组织异步调用链

java - 如何使用spring boot读取excel文件