java - Spring Boot,如何在具有 EmbeddedId 的表中插入新记录
问题描述
我是新手,Spring-boot
但有点熟悉JPA
。我有一个正在处理的项目,我已经database
设置好并从我的数据库生成了我的模型。我参与了至少 4JPA
个项目,这是我第一次遇到@EmbeddedId
。
我有一张Passenger
看起来像的桌子
public class Passenger implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected PassengerPK passengerPK;
@Size(max = 13)
@JoinColumn(name = "user_uuid", referencedColumnName = "uuid", insertable = false, updatable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private User user;
@Column(name = "date_created")
@Temporal(TemporalType.TIMESTAMP)
private Date dateCreated;
....
}
而我生成的passengerPK
@Embeddable
public class PassengerPK implements Serializable {
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 100)
@Column(name = "uuid")
private String uuid;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 100)
@Column(name = "user_uuid")
private String userUuid;
public PassengerPK() {
}
...
}
如果没有@EmbeddedId
inJPA
我会Passenger
先向表中添加一条新记录initializing
并保存用户
final User user = new User();
user.setUuid(UUID.randomUUID().toString());
user.setFname(passengerDto.getFirstName());
user.setLname(passengerDto.getLastName());
user.setPassword(passwordEncoder.encode(passengerDto.getPassword()));
user.setEmail(passengerDto.getEmail());
user.setPhone(passengerDto.getPhone());
user.setDateCreated(new Date());
User savedUser = userRepository.save(user);
然后将该用户传递给我的新Passenger
用户
final Passenger passenger = new Passenger();
passenger.setUuid(UUID.randomUUID().toString());
passenger.setUser(savedUser);
passenger.setDateCreated(new Date());
Passenger savedPassenger = passengerRepository.save(passenger);
But this fails, I get an error that `user_uuid` is null
然后我改变尝试类似
final Passenger passenger = new Passenger();
PassengerPK passengerPK = new PassengerPK();
passengerPK.setUuid(UUID.randomUUID().toString());
passengerPK.setUserUuid(savedUser.getUuid());
passenger.setPassengerPK(passengerPK);
passenger.setDateCreated(new Date());
Passenger savedPassenger = passengerRepository.save(passenger);
我得到错误java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (
mydatabase.
乘客, CONSTRAINT
fk_passenger_user1 FOREIGN KEY (
user_uuid ) REFERENCES
user (
uuid) ON DELETE NO ACTION ON UPDATE NO ACTION)
有人可以帮我理解这个吗?
解决方案
事实证明,我的user
表存储引擎myISAM
与innoDB
我的其他表不同。我将其更改为innoDB
并且我的代码有效。
推荐阅读
- python-2.7 - Python Selenium 添加到购物车
- node.js - DiscordJS Canvas 静默失败。为什么?
- javascript - 如何在 redux 操作中获取用户 ID?
- python - 回顾views.py上的最新日期
- python - Forms.ValidationError 不工作,Django,
- python - 尝试计算文件中每个字母的出现次数时出错
- c++ - 如何在处理空格和换行的 C++ 中解析这个文件?
- reactjs - How to make redirect in nested routes with React Router
- angular - displaying 2 toolbar problem in angular application
- reactjs - 如何在 redux-thunk 中正确使用 useSelector 和 useDispatch?