簡體   English   中英

HIbernate - Spring 啟動 / Null 在發布用戶時引用 FK

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM