Java id列和JPA存在问题

Java id列和JPA存在问题,java,hibernate,jpa,playframework,Java,Hibernate,Jpa,Playframework,我正在尝试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 Mo

我正在尝试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设置字段值

我以这种方式测试模型:
newauto(“bmw”).save()
save()是playframework中模型类的一个方法


有人知道我为什么会有这个问题吗?谢谢

类模型已经添加了一个Long类型的id字段。这与您在类定义中添加的id字段冲突


只要从Auto中删除id字段,它就可以工作了。我不确定数据库中int(11)的定义是否正确,但如果需要,JPA应该自动解决这个问题。

Hmm,在没有id字段的情况下完全尝试。如果扩展模型类,Playframework会自动创建一个Id字段。见:

“。。。 如果您以前使用过JPA,那么您知道每个JPA实体都必须提供一个@Id属性。在这里,模型超类提供了一个自动生成的数字Id,在大多数情况下,这已经足够了。
…“

该列的注释是否应与以下内容类似

@Id
@GeneratedValue(generator="???_seq",strategy=GenerationType.SEQUENCE)

你遇到的问题与低估你在游戏框架中“免费”得到的东西有关

ID(原始问题)和getter和setter(后续评论)都会自动为您生成

id字段来自您正在扩展的模型类,当您在模型中创建公共字段,然后稍后将其称为Model.field时,会自动生成和使用getter和setter


虽然所有模型都会提供一个Id,但如果要做更复杂或更有意义的事情,建议使用您自己的自定义Id。

如果需要添加您自己的Id字段(例如,因为它需要是整数而不是长字符),您可以扩展GenericModel而不是Model。

但是在这种情况下,如何获取对象id?它是否也创建了getter和setter,它们是如何调用的?它是一个公共字段,因此您可以调用“auto.id”并检索它。使用Spring数据JPA并将实体从AbstractPersistable@kindofwhat:Thx扩展到指向正确方向时,会遇到同样的问题!