我试图保存用户对象和地址。在User类中,我定义了与Address的关系。在Address中,我定义了User。
当创建对象并试图将其保存到数据库时,获得以下错误:
SqlExceptionHelper : ERROR: user_id列中的null值违反了null约束
@Entity
class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String address;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private User user;
//getter setter
}用户类;
class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@OneToMany(cascade = CascadeType.ALL)
private List<Address> address;
//Other fields, getters, & setters
}UserService类;
class UserService {
public long createUser(User user) {
User u = new User();
Address address = new Address();
address.setAddress("Windsong Palace");
address.setZipCode("239749");
List<Address> adds = new ArrayList<>();
adds.add(address);
u.setAddress(adds);
//userRepository is the interface extends from JpaRepository<User, Long>
userRepository.save(u);
}
}如何将创建后的user_id传递给Address类?
发布于 2017-12-13 15:14:54
此错误指示您的address对象没有对用户对象的引用。
如果查看代码,则不会为address字段设置用户。试试这个:
...
address.setAddress("Windsong Palace");
address.setZipCode("239749");
address.setUser(u);
...发布于 2017-12-14 06:35:09
我解决了这个问题。是因为清算。我在申请的时候用的是液基。在液化库xml文件中,我创建了表User、Address。在application.properties,spring.jpa.hibernate.ddl-auto=none.
但是在创建用户和地址的时候。存储库的save无法在Address中插入user_id,而是插入null。
转动liquibase.enabled=false (移除液碱)解决了这个问题。
我认为这不是一个更好的解决办法。但是,它的工作没有液基。
https://stackoverflow.com/questions/47794542
复制相似问题