Как сопоставить сущность как java.util.Map с пружинными данными JPA? - PullRequest
0 голосов
/ 25 октября 2019

У меня есть такие сущности:

Сущность Bonus_Request:

@Entity
@Table(name = "bonus_request")
public class BonusRequest {

    //some code above...

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "bonusRequest")
    @JsonManagedReference(value = "parameter-bonus_request")
    private Set<BonusRequestParameter> parameters;
}

Сущность Bonus_Request_Parameter:

@Entity
@Table(name = "bonus_request_parameter")
public class BonusRequestParameter {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Size(max = 30)
    @Column(name = "parameter", nullable = false)
    private String parameter;

    @Size(max = 50)
    @Column(name = "value", nullable = false)
    private String value;

    @JoinColumn(name = "bonus_request_id", nullable = false)
    @ManyToOne(fetch = FetchType.LAZY)
    @JsonBackReference(value = "parameter-bonus_request")
    private BonusRequest bonusRequest;

}

Интересно, можно ли сопоставить сущность BonusRequestParameter какполе java.util.Map в сущности BonusRequest.

Например:

@Entity
@Table(name = "bonus_request")
public class BonusRequest {

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "bonusRequest")
    private Map<String, String> parameters; //String parameter, String value
}

Я использую:

  1. Spring Data JPA - 2.1.7
  2. БД PostgreSQL - 10,7

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Решено с этим:

@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "bonus_request_parameter",
joinColumns = {@JoinColumn(name = "bonus_request_id", referencedColumnName = "id")})
@MapKeyColumn(name = "parameter")
@Column(name = "value")
private Map<String, String> parameters;

Спасибо за помощь.

0 голосов
/ 27 октября 2019

Это будет работать. По умолчанию он загружает карту с нетерпением.

@Entity
@Table(name = "bonus_request")
public class BonusRequest {

    ...

    @ElementCollection
    private Map<String, String> parameters; //String parameter, String value
}
...