繁体   English   中英

获取 java.sql.SQLIntegrityConstraintViolationException:无法添加或更新子行:外键约束失败

[英]getting java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails

我正在开发一个 javafx+hibernate 项目,其中我有一个公司实体,其中包含一个用户列表。 我有一个扩展抽象类 User 的 NaturalPerson 类。 我在我的 javafx 应用程序上创建了一个注册窗口,当我尝试注册 NaturalPerson 时,我得到:

`java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails.`
(`companyhibernate`.`naturalperson`, CONSTRAINT `FK_s5c7plmyohwfq5biwepwg8dqa` FOREIGN KEY (`id`) REFERENCES `company` (`companyName`))

我对休眠很陌生,无法弄清楚如何解决这个问题。 有人可以帮忙吗?

用户.java:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class User implements Serializable {
    @Id @GeneratedValue(strategy = GenerationType.TABLE)
    private Long id;
    protected String name;
    protected String loginName;
    protected String password;
    @ManyToOne
    private Company company;


    public User() {
    }

    public User(String name, String loginName, String password, Company company) {
        this.name = name;
        this.loginName = loginName;
        this.password = password;
        this.company = company;
    }

自然人.java

@Entity
public class NaturalPerson extends User implements Serializable {

    private String surname;
    private String phoneNumber;
    private String email;
    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE},
            mappedBy = "responsibleUsers")
    @OrderBy("id ASC")
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<Category> responsibleForCategories;
    @ManyToOne
    private Company company;

    public NaturalPerson() {
    }

    public NaturalPerson(String name, String loginName, String password, String surname, String phoneNumber, String email, List<Category> responsibleForCategories, Company company) {
        super(name, loginName, password, company);
        this.surname = surname;
        this.phoneNumber = phoneNumber;
        this.email = email;
        this.responsibleForCategories = responsibleForCategories;

    }

公司.java

@Entity
public class Company implements Serializable {

    @Id
    private String companyName;
    private String compEmail;
    private String compPhoneNum;
    @OneToMany(mappedBy = "company", cascade= CascadeType.ALL, orphanRemoval=true)
    @OrderBy("id ASC")
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<Category> allCategories;
    @OneToMany(mappedBy = "company", cascade= CascadeType.ALL, orphanRemoval=true)
    @OrderBy("id ASC")
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<User> allUsers;


    public Company() {
    }

    public Company(String companyName, String compEmail, String compPhoneNum, ArrayList<Category> allCategories, ArrayList<User> allUsers) {
        this.companyName = companyName;
        this.compEmail = compEmail;
        this.compPhoneNum = compPhoneNum;
        this.allCategories = allCategories;
        this.allUsers = allUsers;
    }

自然人注册.java

public class NaturalPersonRegistration implements Initializable {
@FXML
public TextField nameField;
@FXML
public TextField surnameField;
@FXML
public TextField phoneNumField;
@FXML
public TextField emailField;
@FXML
public TextField usernameField;
@FXML
public PasswordField passwordField;
@FXML
public Button signUpButton;

private Company company;

EntityManagerFactory factory = Persistence.createEntityManagerFactory("CompanyHibernate");
CompanyHibernateControl companyHibernateControl = new CompanyHibernateControl(factory);
UserHibernateControl userHibernateControl = new UserHibernateControl(factory);

public void setCompany(Company company) {
    this.company = company;
}

public void createUser(ActionEvent actionEvent) throws Exception {
    company = companyHibernateControl.findCompany(company.getCompanyName());
    List<Category> responsibleForCategories = new ArrayList<Category>();
    User user = new NaturalPerson(nameField.getText(),
            usernameField.getText(),
            passwordField.getText(),
            surnameField.getText(),
            phoneNumField.getText(),
            emailField.getText(),
            responsibleForCategories,
            company
    );
    userHibernateControl.create(user);
    loadMainWindow();
}

您在注册时是否检查过

company = companyHibernateControl.findCompany(company.getCompanyName());

返回非空值?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM