java - 如何使用spring DAO保存外键实体

标签 java hibernate jpa spring-boot spring-data

    public class Customer implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idCustomer")
    private Integer idCustomer;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idCustomer")
    private Collection<Login> loginCollection;

    }

    public class Login implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idLogin")

    @JoinColumn(name = "idCustomer", referencedColumnName = "idCustomer")
    @ManyToOne(optional = false)
    private Customer idCustomer;

    }

    //trying to save the customer and login in the database  

        ArrayList<Login> logins = new ArrayList<Login>();
        Login log = new Login();
        log.setIdCustomer(cust);
        logins.add(log);
        cust.setLoginCollection(logins);
        cust = custRepo.save(cust);  //failed 

    //Login log = new Login();
    //log.setUName(user);
    //log.setPassword(pass);
    //log.setIdCustomer(cust);
    //cust = custRepo.save(cust);
    //logRepository.save(log);  //failed too.

我在我的项目中使用 spring 数据。我有 2 个模型类 CustomerLogin。我的登录类在数据库中有一个外键 idCustomer 。当我尝试在没有登录的情况下保存客户时,它工作正常,但问题是我无法在数据库中保存登录对象。

我收到一条错误消息

Unknown column 'id_customer' in 'field list' the jpa entities are generated.

这是一个图像实际数据库。

enter image description here

最佳答案

您的示例中的 idCustomer 过多。

尝试下面的代码。 我对带注释的成员@OneToMany 和@ManyToOne 做了一些更改, 遵循此处建立的提示 JPA JoinColumn vs mappedBy

此外,我已将 idLogin 包含在 Login 类中。我不知道这是否是您代码中的拼写错误。

public class Customer implements Serializable {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "idCustomer")
     private Integer idCustomer;

     @OneToMany(cascade = CascadeType.ALL, mappedBy = "customer")
     private Collection<Login> loginCollection;

}

public class Login implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idLogin")
    private Integer idLogin;

    @ManyToOne
    @JoinColumn(name="idCustomer", insertable=false, updatable=false)
    private Customer customer;

}

关于java - 如何使用spring DAO保存外键实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36879770/

相关文章:

java - 如果用户输入不正确,如何让问题循环

java - `Object` 方法 : `toString` ,、 `equals` 和 `hashCode` 中延迟加载的实体

java - Hibernate 级联引用约束冲突

spring-boot - 是否可以将 Snowflake 与 Spring Boot/JPA/Hibernate 一起使用

java - @NotNull 在 JPA/Hibernate 中默认

java - 有没有办法删除 @OneToMany 关系(使用 JoinTable)中的子实体,而无需获取完整集合?

java - 提取特定行java

java - 玩!模板 - 将动态字符串传递给 JavaScript 不起作用?

java - 无法修复空指针异常

java - 有没有更好的方法来保存一个值为集合的 map ?