首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Spring 1.5.9和Hibernate获取保存时自动生成的Id

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

Stack Overflow用户
提问于 2018-03-07 11:53:55
回答 1查看 1.9K关注 0票数 3

我已经使用JpaRepository实现了持久性。我希望在保存任何数据时生成Id,而不需要使用任何额外的DB操作。我还跟踪了this-approach,但它每次都返回0(零),而不是实际的id。以下是我的执行情况:

我的模范班:

代码语言:javascript
复制
@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;
    }
}

我的刀类:

代码语言:javascript
复制
@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();
        }
    }
}

我的服务班:

代码语言:javascript
复制
@Service
public class RegistrationServiceImpl implements IRegistrationService {

    @Autowired
    private IRegistrationDAO iRegistrationDAO;

    @Override
    public boolean addRegistration(RegistrationsEntity registrationsEntity) {

        iRegistrationDAO.insertRegistration(registrationsEntity);
        return true;
    }
}

我的仓库界面:

代码语言:javascript
复制
public interface RegistrationRepository extends JpaRepository<RegistrationsEntity, Long> {
}

我的财务主任:

代码语言:javascript
复制
@Controller
public class DummyController {

    @GetMapping(value = "regtest")
    @ResponseBody
    public void regtest() {

        RegistrationsEntity entity = new RegistrationsEntity();
        entity.setrName("ssssss");
        entity.setrPassword("12345");
        entity.setrEmail("ssss@rrrr.net");

        iRegistrationService.addRegistration(entity);
    }
}

请帮帮我..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-07 12:00:13

Id应按以下方式声明:

代码语言:javascript
复制
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

此外,应该在数据库模式中设置自动增量属性(例如在MySQL中)。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49151307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档