使用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;