我有一个拥有多个地址和多个电话的用户。 我使用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