[英]org.hibernate.PropertyValueException: not-null property references a null or transient value while using Spring Boot
[英]HIbernate - Spring boot / Null references FK when posting an User
Controller
@PostMapping
public User newUser(@RequestBody User user) {
return userService.save(user);
}
角色實體
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "roles")
public class Role {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Long role_id;
@Column(name = "rol")
@Enumerated(EnumType.STRING)
private RoleType role;
@Enumerated(EnumType.STRING)
@ElementCollection(targetClass = Permission.class)
@CollectionTable(
name = "permisos",
joinColumns=@JoinColumn(name = "role_id", referencedColumnName = "role_id")
)
private List<Permission> permissions;
實體
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "usuarios")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String password;
@JoinColumn(name = "role_id")
@ManyToOne(targetEntity= com.ecommerce.model.Role.class)
private Role role;
發布示例
{
"name" : "User",
"password" : "1111",
"role_id": 1
}
用戶與角色有關系,我在 sql 中添加了一個角色,但是當我發布時返回 NULL,這是我所期望的:我找不到解決方案查詢示例:
插入 usuarios (name,password,role_id) 值 ("Ignacio","1234",1);
EXPECTED OUTPUT
{
"id": 14,
"name": "User",
"password": "1111",
"role": {
"role_id": 1,
"role": "seller",
"permissions": [
"add_product"
]
}
}
OUTPUT
{
"id": 15,
"name": "User2",
"password": "1111",
"role": null
}
這是解決方案,然后使用 DTO 更清潔。
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "usuarios")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String password;
@JoinColumn(name = "role_id", referencedColumnName = "role_id",nullable = true,insertable=false, updatable=false)
@ManyToOne(targetEntity= com.ecommerce.model.Role.class)
private Role role;
@JsonProperty("role_id")
@JsonIgnoreProperties("role_id")
@JsonBackReference
private Long role_id;
立即發布示例
{
"name" : "Federico",
"password" : "tupassword",
"role_id": 1
}
OUTPUT
{
"id": 14,
"name": "Federico",
"password": "tupassword",
"role": {
"role_id": 1,
"role": "seller",
"permissions": [
"add_product",
"edit_product",
"delete_product"
]
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.