我试图将用户对象与地址一起保存。在User
课程内,我定义了与Address
的关系。在Address
内,我定义了User
。
创建对象并尝试将其保存到数据库时,请收到以下错误:
SqlExceptionHelper:ERROR:“user_id”列中的空值违反非空约束
@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
?
答案 0 :(得分:2)
错误表明您的地址对象没有对用户对象的引用。
如果查看代码,则不要为地址字段设置用户。试试这个:
...
address.setAddress("Windsong Palace");
address.setZipCode("239749");
address.setUser(u);
...
答案 1 :(得分:0)
我弄明白了这个问题。这是由于liquibase。我正在使用liquibase和我的应用程序。在liquibase xml
文件中,我创建了表User
,Address
。在application.properties
,spring.jpa.hibernate.ddl-auto=none
。
但是在创建用户和地址时。存储库的save
无法在user_id
中插入Address
,它正在插入null
。
转动liquibase.enabled=false
(删除liquibase)解决了这个问题。
我认为这不是更好的解决方案。但是,它的工作没有liquibase。