我有一個擁有多個地址和多個電話的用戶。 我使用mysql和spring。 當我更新用戶時,我刪除了它的地址和電話,並插入數據。刪除並插入,而不是更新
更新用戶 刪除地址 刪除電話
插入地址 插入電話
create table user(
user_id INT NOT NULL AUTO_INCREMENT,
usertitle varchar(100),
hasphones boolean,
PRIMARY KEY (user_id)
);
create table address_user(
address_user_id INT NOT NULL AUTO_INCREMENT,
addresstitle varchar(100),
addressstr varchar(5000),
showcolumn boolean,
usephones boolean,
user_id int not null,
PRIMARY KEY (address_user_id),
KEY `user_id` (`user_id`),
CONSTRAINT `address_user_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)
);
create table phone_user(
phone_user_id INT NOT NULL AUTO_INCREMENT,
typeParameter int,
phonelabel varchar(25),
user_id int not null,
PRIMARY KEY (phone_user_id),
KEY `user_id` (`user_id`),
CONSTRAINT `phone_user_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)
);
我得到這個錯誤
EX =(org.springframework.web.util.NestedServletException)組織.springframework.web.util.NestedServletException:
要求處理失敗;嵌套異常是org.springframework.dao.DataIntegrityViolationException:PreparedStatementCallback; SQL [insert into address_user(addresstitle,addressstr,showcolumn,usephones,user_id)values(?,?,?,?,?)];
不能添加或更新子行,外鍵約束失敗;(base
address_user
,約束address_user_ibfk_1
外鍵(user_id
)參考文獻user
(user_id
)。) 嵌套異常是com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:
刪除Java的代碼
StringBuffer sb = new StringBuffer();
sb.append(" delete from address_user where user_id = ? ");
jdbcTemplate.update(sb.toString(), id);
StringBuffer sb = new StringBuffer();
sb.append(" delete from phone_user where user_id = ? ");
jdbcTemplate.update(sb.toString(), id);
插入代碼
StringBuffer sb = new StringBuffer();
sb.append(" insert into phone_user (");
sb.append(" typeparameter, phonelabel, user_id) ");
sb.append(" values (?, ?, ?) ");
jdbcTemplate.update(sb.toString(), phone.getTypeParameter().getValue(), phone.phonelabel(), phone.getUser_id());
StringBuffer sb = new StringBuffer();
sb.append(" insert into address_user (");
sb.append(" addresstitle, addressstr, showcolumn, usephones, user_id) ");
sb.append(" values (?, ?, ?, ?, ?) ");
ĴdbcTemplate.update(sb.toString(), address.getAddressTitle(),address.getAddressStr(),address.getShowColumnName(),address.getUsePhones(),phone.getUser_id());
我真的不明白,我不做更新,我刪除並插入。
請添加所有相關的Java代碼 – reto