Java 为什么这个基本的Spring Boot JPA应用程序无法启动

Java 为什么这个基本的Spring Boot JPA应用程序无法启动,java,spring-boot,spring-data-jpa,Java,Spring Boot,Spring Data Jpa,我正在做一个基本的凝乳弹簧靴。我使用web、jpa和mysql引用从中生成了Spring Boot应用程序。 与往常一样,我对存储库的定义如下:- public interface URepository extends JpaRepository<SharedKeyUser, Long> { } 我正在尝试基于共享主键建立一对一关系。存储库名称不是问题。确保使用正确的注释对SharedKeyUser Pojo进行了注释@实体、@ID和@GeneratedValue来自javax.

我正在做一个基本的凝乳弹簧靴。我使用web、jpa和mysql引用从中生成了Spring Boot应用程序。
与往常一样,我对存储库的定义如下:-

public interface URepository extends JpaRepository<SharedKeyUser, Long> {
}

我正在尝试基于共享主键建立一对一关系。

存储库名称不是问题。确保使用正确的注释对SharedKeyUser Pojo进行了注释@实体、@ID和@GeneratedValue来自javax.persistence API。
并确保还为应用程序设置了数据源属性。

存储库名称不是问题。确保使用正确的注释对SharedKeyUser Pojo进行了注释@实体、@ID和@GeneratedValue来自javax.persistence API。
并确保您还为应用程序设置了数据源属性。

您的代码可以更改很多内容。首先,将@Repository注释放到您的存储库中。第二步删除sharedKeyUser中的mappedBy=“sharedKeyUser”。并放入@JoinColumn(name=“address\u id”,referencedColumnName=“id”)。将mappedBy放在address类中

@Repository
public interface ARepository
    extends JpaRepository<SharedKeyAddress,Long> {

}

@Entity
@Table(name = "shared_key_address")
public class SharedKeyAddress {

    @Id
    @Column(name = "id")
    private Long id;

    @Column(name = "street")
    private String street;

    @Column(name = "city")
    private String city;

    @OneToOne(mappedBy = "address")
    private SharedKeyUser user;

    public Long getId() {
        return id;
    }

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

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public SharedKeyUser getUser() {
        return user;
    }

    public void setUser(SharedKeyUser user) {
        this.user = user;
    }
}


@Entity
@Table(name = "shared_key_users")
public class SharedKeyUser {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @Column(name = "username")
    private String userName;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "address_id", referencedColumnName = "id")
    private SharedKeyAddress address;

    public Long getId() {
        return id;
    }

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

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public SharedKeyAddress getAddress() {
        return address;
    }

    public void setAddress(SharedKeyAddress address) {
        this.address = address;
    }
}
@存储库
公共界面是积极的
扩展JPA假设{
}
@实体
@表(name=“共享密钥地址”)
公共类SharedKeyAddress{
@身份证
@列(name=“id”)
私人长id;
@列(name=“street”)
私家弦街;;
@列(name=“city”)
私人城市;
@OneTONE(mappedBy=“地址”)
私有共享密钥用户;
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getStreet(){
返回街;;
}
公共街道(字符串街){
这条街;
}
公共字符串getCity(){
回归城市;
}
公共城市(字符串城市){
this.city=城市;
}
public SharedKeyUser getUser(){
返回用户;
}
public void setUser(SharedKeyUser用户){
this.user=用户;
}
}
@实体
@表(name=“共享密钥用户”)
公共类SharedKeyUser{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”)
私人长id;
@列(name=“username”)
私有字符串用户名;
@OneToOne(级联=级联类型.ALL)
@JoinColumn(name=“address\u id”,referencedColumnName=“id”)
私有共享密钥地址;
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getUserName(){
返回用户名;
}
public void setUserName(字符串用户名){
this.userName=用户名;
}
公共SharedKeyAddress getAddress(){
回信地址;
}
公共无效设置地址(SharedKeyAddress地址){
this.address=地址;
}
}

您的代码可以更改很多内容。首先,将@Repository注释放到您的存储库中。第二步删除sharedKeyUser中的mappedBy=“sharedKeyUser”。并放入@JoinColumn(name=“address\u id”,referencedColumnName=“id”)。将mappedBy放在address类中

@Repository
public interface ARepository
    extends JpaRepository<SharedKeyAddress,Long> {

}

@Entity
@Table(name = "shared_key_address")
public class SharedKeyAddress {

    @Id
    @Column(name = "id")
    private Long id;

    @Column(name = "street")
    private String street;

    @Column(name = "city")
    private String city;

    @OneToOne(mappedBy = "address")
    private SharedKeyUser user;

    public Long getId() {
        return id;
    }

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

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public SharedKeyUser getUser() {
        return user;
    }

    public void setUser(SharedKeyUser user) {
        this.user = user;
    }
}


@Entity
@Table(name = "shared_key_users")
public class SharedKeyUser {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @Column(name = "username")
    private String userName;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "address_id", referencedColumnName = "id")
    private SharedKeyAddress address;

    public Long getId() {
        return id;
    }

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

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public SharedKeyAddress getAddress() {
        return address;
    }

    public void setAddress(SharedKeyAddress address) {
        this.address = address;
    }
}
@存储库
公共界面是积极的
扩展JPA假设{
}
@实体
@表(name=“共享密钥地址”)
公共类SharedKeyAddress{
@身份证
@列(name=“id”)
私人长id;
@列(name=“street”)
私家弦街;;
@列(name=“city”)
私人城市;
@OneTONE(mappedBy=“地址”)
私有共享密钥用户;
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getStreet(){
返回街;;
}
公共街道(字符串街){
这条街;
}
公共字符串getCity(){
回归城市;
}
公共城市(字符串城市){
this.city=城市;
}
public SharedKeyUser getUser(){
返回用户;
}
public void setUser(SharedKeyUser用户){
this.user=用户;
}
}
@实体
@表(name=“共享密钥用户”)
公共类SharedKeyUser{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”)
私人长id;
@列(name=“username”)
私有字符串用户名;
@OneToOne(级联=级联类型.ALL)
@JoinColumn(name=“address\u id”,referencedColumnName=“id”)
私有共享密钥地址;
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getUserName(){
返回用户名;
}
public void setUserName(字符串用户名){
this.userName=用户名;
}
公共SharedKeyAddress getAddress(){
回信地址;
}
公共无效设置地址(SharedKeyAddress地址){
this.address=地址;
}
}

您能否共享SharedKeyUser类?请检查添加的更多代码。我正在尝试基于共享主键建立一对一的关系。你能共享SharedKeyUser类吗?请检查添加的更多代码。我正在尝试基于共享主键建立一对一关系。请检查添加的更多代码。我正在尝试基于共享主键建立一对一关系。在SharedKeyUser Pojo中使用“生成类型”作为标识。抱歉,我不太清楚“生成类型”作为标识是什么意思?请阅读“更改生成类型”。自动更改为“生成类型”。标识希望对共享主键有效。更新为标识后。我收到的新错误如下:-字段“id”没有默认值2020-07-15 12:26:53.775错误32142---[nio-8080-exec-2]o.a.c.c.c.[/].[dispatcherServlet]:路径[]上下文中Servlet[dispatcherServlet]的Servlet.service()引发异常[请求处理失败;嵌套异常为org.springframework.orm.jpa.JpaSystemException:无法执行语句;嵌套异常为org.hibernate.exception.genericjdbception:无法执行语句]对于根原因,请检查添加的更多代码。我正在尝试进行一对一的重新设置
@Repository
public interface ARepository
    extends JpaRepository<SharedKeyAddress,Long> {

}

@Entity
@Table(name = "shared_key_address")
public class SharedKeyAddress {

    @Id
    @Column(name = "id")
    private Long id;

    @Column(name = "street")
    private String street;

    @Column(name = "city")
    private String city;

    @OneToOne(mappedBy = "address")
    private SharedKeyUser user;

    public Long getId() {
        return id;
    }

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

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public SharedKeyUser getUser() {
        return user;
    }

    public void setUser(SharedKeyUser user) {
        this.user = user;
    }
}


@Entity
@Table(name = "shared_key_users")
public class SharedKeyUser {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @Column(name = "username")
    private String userName;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "address_id", referencedColumnName = "id")
    private SharedKeyAddress address;

    public Long getId() {
        return id;
    }

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

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public SharedKeyAddress getAddress() {
        return address;
    }

    public void setAddress(SharedKeyAddress address) {
        this.address = address;
    }
}