数值未保存在数据库中。

huangapple go评论82阅读模式
英文:

Values are not saved in the database

问题

为什么我发送了数值,但id_house和id_tenant仍然为null?日期已正确保存。如何为公寓设置租户,以及正在租用哪间公寓?

我接受以下数值:

@PostMapping("/rent")
@PreAuthorize("hasAuthority('user:write')")
public void homeRent(@RequestBody Contract contract) {
    contractRepository.save(contract);
}

合同类:

@Data
@Entity
@Table(name = "contract", schema = "public")
public class Contract {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @ManyToOne
    @JoinColumn(name = "id_house")
    @ToString.Exclude
    @EqualsAndHashCode.Exclude
    @JsonIgnore
    private House house;

    @ManyToOne
    @JoinColumn(name = "id_tenant")
    @EqualsAndHashCode.Exclude
    @ToString.Exclude
    @JsonIgnore
    private User user;

    @Column(name = "end_date")
    private LocalDate end_date;

    @Column(name = "start_date")
    private LocalDate start_date;
}

Postman 请求示例:

{
    "start_date": "2020-03-12",
    "end_date": "2020-03-19",
    "id_house": 2,
    "id_tenant": 3
}
英文:

Why do I have null id_house and id_tenant if I send values? The date is saved correctly. How do I set the tenant for an apartment and which apartment is being rented?

I accept values:

@PostMapping("/rent")
    @PreAuthorize("hasAuthority('user:write')")
    public void homeRent(@RequestBody Contract contract) {
        contractRepository.save(contract);
    }

Contract:

@Data
@Entity
@Table(name = "contract", schema = "public")
public class Contract {
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

@ManyToOne
@JoinColumn(name = "id_house")
@ToString.Exclude
@EqualsAndHashCode.Exclude
@JsonIgnore
private House house;

@ManyToOne
@JoinColumn(name = "id_tenant")
@EqualsAndHashCode.Exclude
@ToString.Exclude
@JsonIgnore
private User user;

@Column(name = "end_date")
private LocalDate end_date;
@Column(name = "start_date")
private LocalDate start_date;
}

Postman:

{
    "start_date" : "2020-03-12",
    "end_date" : "2020-03-19",
    "id_house" : 2,
    "id_tenant" : 3
}

答案1

得分: 0

首先,我看到的问题是,为什么在你的JSON请求中有一个 id_tenant,而实际上应该是 user?请记住,id_tenant 只是列名,不是字段名。

另外,你应该提供一个对象 {},而不是整数作为 user,所以你的请求会类似于

{
  ...
  "user": {"id": 1....}
  ...
}
英文:

First what I see wrong is why do you have id_tenant in your JSON request when it is actually user? Keep in mind id_tenant is just column name, not field name.

Also you should provide object {} not integer for user so your request would look something like

{
...
  "user": {"id": 1....}
...
}

答案2

得分: 0

@PostMapping("/rent")
@PreAuthorize("hasAuthority('user:write')")
public void homeRent(@RequestBody ContractDto contractDto) {
    Contract contract = new Contract();
    House house = houseRepository.findById(contractDto.getId_house()).orElseThrow();
    User user = userRepository.findById(contractDto.getId_tenant()).orElseThrow();
    contract.setHouse(house);
    contract.setUser(user);
    contract.setStart_date(contractDto.getStart_date());
    contract.setEnd_date(contractDto.getEnd_date());

    contractRepository.save(contract);
}
英文:
@PostMapping("/rent")
    @PreAuthorize("hasAuthority('user:write')")
    public void homeRent(@RequestBody ContractDto contractDto) {
        Contract contract = new Contract();
        House house = houseRepository.findById(contractDto.getId_house()).orElseThrow();
        User user = userRepository.findById(contractDto.getId_tenant()).orElseThrow();
        contract.setHouse(house);
        contract.setUser(user);
        contract.setStart_date(contractDto.getStart_date());
        contract.setEnd_date(contractDto.getEnd_date());

        contractRepository.save(contract);
    }

huangapple
  • 本文由 发表于 2020年10月1日 02:35:01
  • 转载请务必保留本文链接:https://go.coder-hub.com/64143765.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定