У меня есть следующие таблицы Customers, Roles, CustomerRoles. Клиенты и роли имеют длинную PK, а CustomerRoles, очевидно, выполняет сопоставления «многие ко многим». Считайте таблицу ролей фиксированной (но не жестко закодированной), определенной системой. Т.е. к столу приводят "enum". Т.е. «Admin», «User» и т. Д.
На Java у меня есть сущность Customer и RoleEntity, и я использую Hibernate / JPA для сопоставления.
Все работаеткак это сейчас, но я получаю Json, который выглядит следующим образом:
{
"customerId": 100000,
"firstName": "Bob",
"lastName": "Jenkins",
"roles": [
{
"name": "Admin"
},
{
"name": "Super User"
}
]
},
Я действительно хочу, чтобы он выглядел так:
"roles": [ "Admin", "Super User" ]
и внутренне имел его FK'с помощью таблицы M2M с использованием идентификаторов. Обратите внимание, что поле roleid установлено в json ignore, но оно все равно оставляет его как массив объектов, а не как массив строк.
Очевидно, что строки должны быть применены к тому, что в таблице Roles.
Есть предложения?
Субъект клиента:
@ApiModelProperty(notes="Id of the customer.", required=true, value="100000")
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@JsonProperty(access=Access.READ_ONLY)
private Long customerId = 0L;
@NotNull
@Size(min=2, max=64)
@ApiModelProperty(notes="First name of the customer.", required=true, value="John")
private String firstName;
@NotNull
@Size(min=2, max=64)
@ApiModelProperty(notes="Last name of the customer.", required=true, value="Smith")
private String lastName;
@ManyToMany(cascade={ CascadeType.PERSIST })
@JoinTable(name="CustomerRoles",
joinColumns={ @JoinColumn(name="CustomerId") },
inverseJoinColumns={ @JoinColumn(name="RoleId") }
)
private List<Role> roles = new ArrayList<>();
public Long getCustomerId() {
return this.customerId;
}
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return this.lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public List<Role> getRoles() {
//return new ArrayList<Role>(this.roles);
return this.roles;
}
Субъект роли:
@ApiModelProperty(notes="Id of the role.", required=true, value="1")
@Id
//@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long roleId;
@NotNull
@Size(min=2, max=64)
@ApiModelProperty(notes="Name of the role.", required=true, value="Admin")
private String name;
@JsonIgnore
public Long getRoleId() {
return this.roleId;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}