У меня возникли проблемы с отображением родительско-дочерних классов в репозиториях Spring Rest.Мой случай заключается в том, что мне нужно аутентифицировать обоих типов пользователей с помощью Spring Security, но я также хочу иметь возможность назначать атрибуты, относящиеся к типу, такие как «Домашние животные», «Владелец» и «Зарплата для сотрудника».Это хорошая структура для достижения такой цели?Если это так, пожалуйста, помогите с этой проблемой.
Я уже сделал это, чтобы вставить в одну таблицу, отличающую одну от другой с колонкой dtype, но не могу вставить любые другие значения, кроме dtype.
IЯ использую новейший Spring Boot (по умолчанию JSON Mapper) с MS SQL.
Это моя полезная нагрузка для запроса POST:
{
"username": "admin", // null in db
"firstName": "Delacruz", // null in db
"lastName": "House", // null in db
"dtype": "Owner" // present in db
}
Это моя структура класса:Репозиторий
@RepositoryRestResource(path = "user", collectionResourceRel = "user")
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
}
Родительский класс - Пользователь
@Entity
@Table(name = "users")
@Inheritance
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME,
include=JsonTypeInfo.As.EXISTING_PROPERTY,
property="dtype")
@JsonSubTypes({
@JsonSubTypes.Type(name="Owner", value=Owner.class),
@JsonSubTypes.Type(name="Employee", value=Employee.class)})
@RestResource(path="user")
public abstract class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String username;
// rest of properties
}
Сотрудник - первый дочерний класс
@EqualsAndHashCode(callSuper = true)
@Entity
@Data
public class Employee extends User {
private String type = "EMPLOYEE";
@Column
@Enumerated
private EmployeeType employeeType;
@Column
private LocalDate dateOfEmployment;
//rest of properties
}
Владелец - другой дочерний класс
@EqualsAndHashCode(callSuper = true)
@Data
@Entity
public class Owner extends User{
@OneToMany(mappedBy = "owner")
private List<Pet> pets;
}