2017-05-28 53 views
0

我在同一个项目中有几个类,其中id始终是自动生成的。但是在这个特定的情况下,我的id值始终为空。我真的很想知道什么是错误的,因为经过一些改变后,它停止工作。并将其与其他类进行比较,代码似乎是相同的。Java JPA GenerationType.Auto值始终为空

package com.checkin.model.entity; 
import javax.persistence.*; 


@Entity 
public class Checkin { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long id; 

@Column(nullable = false) 
private String date; 

public Checkin(){ 

} 

public Checkin(String date){ 
    this.date = date; 
    System.out.println(this.id); 
    System.out.println(this.getId()); 
} 


public Long getId() {return id;} 

public void setId(Long id) {this.id = id;} 

public String getDate() {return date;} 

public void setDate(String date) {this.date = date;} 

} 

这就是对象保存在存储库:

package com.checkin.model.repository; 

import com.checkin.model.entity.Checkin; 
import org.springframework.data.repository.CrudRepository; 
import org.springframework.stereotype.Repository; 

@Repository("checkinRepository") 
public interface CheckinRepository extends CrudRepository<Checkin, Long> { 
    Checkin findById(Long id); 


} 

终于这是我从邮递员

得到的结果

enter image description here

+0

什么底层的数据库?并显示id列的DDL定义 –

+0

我并不清楚DDL定义的含义。我使用Hibernate和JPA。关于你关于底层数据库的问题,下面是我在build.gradle中使用的东西:compile(“org.springframework.boot:spring-boot-starter-data-jpa”) compile(“com.h2database:h2 “) –

+0

@AntonioDelaTorre安装Hibernate重新创建数据库表(并丢失信息)并启用SQL日志。您将在日志中具有“DDL”(SQL CREATE TABLE语句)。其他生成DDL的方法:https://geowarin.github.io/generate-ddl-with-hibernate.html。这有点复杂。 –

回答

0

的代型AUTO套底层数据库生成ID http://docs.oracle.com/javaee/6/api/javax/persistence/GenerationType.html#AUTO

在这种情况下,您要检查的是H2数据库id列是否具有生成ID的属性。我猜测它没有。我不用自己太多的自己,所以我假设如果你的汽车适用于其他Entities然后那些设置正确。

您可能需要执行下列操作之一:在H2

    • 迁移这里
    • 更新列重新创建表
  • +0

    感谢您的回答!我正在学习这个教程:https://spring.io/guides/gs/accessing-data-jpa/但我认为这个问题不是h2或者来自JPA的问题。因为,当我创建和对象,并将其保存到在Application.java中规定的方式,在数据库,通过使用:公共CommandLineRunner演示(CheckinRepository库){ \t \t回报(参数) - > { \t \t \t //保存几个客户 \t \t \t repository.save(new Checkin(“Jack”));我得到:2017-05-29 16:50:09.035 INFO 33570 --- [main] com.checkin.Application:Checkin:[id = 1,Date ='Jack'] –

    +0

    所以我认为它与RESTful界面 –

    +0

    非常感谢!我解决了这个问题......这是你可以想象的最愚蠢的事情之一......我评论了数据库中的.save,当然如果数据库没有收到对象,它不会生成一个ID ... –