Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Spring boot 1.5.9和Hibernate在保存时获取自动生成的Id_Hibernate_Spring Mvc_Spring Boot_Spring Data Jpa - Fatal编程技术网

使用Spring boot 1.5.9和Hibernate在保存时获取自动生成的Id

使用Spring boot 1.5.9和Hibernate在保存时获取自动生成的Id,hibernate,spring-mvc,spring-boot,spring-data-jpa,Hibernate,Spring Mvc,Spring Boot,Spring Data Jpa,我已经使用JpaRepository实现了持久化。我希望在不使用任何额外的DB操作的情况下保存任何数据时生成Id。我也遵循了,但每次都返回0(零),而不是实际id。下面是我的实现: 我的模型课: @EntityListeners(AuditingEntityListener.class) @Entity @Table(name = "registrations", schema = "sqs") public class RegistrationsEntity implements Serial

我已经使用
JpaRepository
实现了持久化。我希望在不使用任何额外的DB操作的情况下保存任何数据时生成Id。我也遵循了,但每次都返回0(零),而不是实际id。下面是我的实现:

我的模型课:

@EntityListeners(AuditingEntityListener.class)
@Entity
@Table(name = "registrations", schema = "sqs")
public class RegistrationsEntity implements Serializable {
    private long rId;
    private String rName;
    private String rPassword;
    private String rEmail;
    private Date rCreatedAt;
    private Date rUpdatedAt;

    @Id
    @Column(name = "r_id")
    public long getrId() {
        return rId;
    }

    public void setrId(long rId) {
        this.rId = rId;
    }

    @Basic
    @Column(name = "r_name")
    public String getrName() {
        return rName;
    }

    public void setrName(String rName) {
        this.rName = rName;
    }

    @Basic
    @Column(name = "r_password")
    public String getrPassword() {
        return rPassword;
    }

    public void setrPassword(String rPassword) {
        this.rPassword = rPassword;
    }

    @Basic
    @Column(name = "r_email")
    public String getrEmail() {
        return rEmail;
    }

    public void setrEmail(String rEmail) {
        this.rEmail = rEmail;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @CreatedDate
    @Basic
    @Column(name = "r_created_at", nullable = false, updatable = false)
    public Date getrCreatedAt() {
        return rCreatedAt;
    }

    public void setrCreatedAt(Date rCreatedAt) {
        this.rCreatedAt = rCreatedAt;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @LastModifiedDate
    @Basic
    @Column(name = "r_updated_at", nullable = false)
    public Date getrUpdatedAt() {
        return rUpdatedAt;
    }

    public void setrUpdatedAt(Date rUpdatedAt) {
        this.rUpdatedAt = rUpdatedAt;
    }
}
我的刀类:

@Repository
@Transactional
public class RegistrationDAOImpl implements IRegistrationDAO {

    @Autowired
    RegistrationRepository registrationRepository;

    @Override
    public void insertRegistration(RegistrationsEntity registrationsEntity) {

        registrationRepository.save(registrationsEntity);

        try {
            System.out.println("Reg Id " + registrationsEntity.getrId());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
我的服务级别:

@Service
public class RegistrationServiceImpl implements IRegistrationService {

    @Autowired
    private IRegistrationDAO iRegistrationDAO;

    @Override
    public boolean addRegistration(RegistrationsEntity registrationsEntity) {

        iRegistrationDAO.insertRegistration(registrationsEntity);
        return true;
    }
}
我的存储库界面:

public interface RegistrationRepository extends JpaRepository<RegistrationsEntity, Long> {
}

请帮助…

Id应该这样声明:

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
此外,应在数据库模式中设置autoincrement属性(例如在MySQL中)

您获得0的原因很可能是因为数据库没有自动生成该id并将其设置为默认值0。很可能您甚至没有在数据库模式中设置PK。

@GeneratedValue(strategy=GenerationType.AUTO)是我错过的,我的后端使用autoincrement和serial很好。谢谢。。。
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;