Java id列和JPA存在问题
我正在尝试JPA与一个非常简单的类的发挥!框架,我对id列有一些问题 我的sql数据库只有两列: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
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扩展到指向正确方向时,会遇到同样的问题!