Я работаю над приложением, которое использует Spring Boot + JPA для сохранения некоторых объектов.Однако эти объекты (и, конечно, конфигурация Spring) являются единственными в приложении, которые зависят от Spring / JPA.Вот почему мы хотели разделить приложение на два компонента.Основное приложение, которое должно быть независимым от Spring и любых связанных с JPA вещей и Spring-приложения.Для этой цели мы создали интерфейс и базовую реализацию сущности в базовом приложении и производную реализацию в приложении Spring, которая переопределяет только получатели и использует доступ к свойству.Но теперь Spring жалуется, что поля отсутствуют.
Вот класс в основном приложении, в основном просто набор методов получения и установки:
public class UserImpl implements User {
protected Set<UserProfile> userProfiles = new HashSet<>();
protected Set<Playlist> playlists = new HashSet<>();
protected String userName;
protected String password;
protected String securityQuestion;
protected String securityQuestionAnswer;
protected String token;
public UserImpl() {
}
public UserImpl(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSecurityQuestion() {
return securityQuestion;
}
public void setSecurityQuestion(String securityQuestion) {
this.securityQuestion = securityQuestion;
}
public String getSecurityQuestionAnswer() {
return securityQuestionAnswer;
}
public void setSecurityQuestionAnswer(String securityQuestionAnswer) {
this.securityQuestionAnswer = securityQuestionAnswer;
}
public void setUserProfiles(Set<UserProfile> userProfiles) {
this.userProfiles = userProfiles;
}
public List<UserProfile> getUserProfiles() {
return new ArrayList<>(userProfiles);
}
public void setToken(String token) {
this.token = token;
}
public String getToken() {
return token;
}
public void setPlaylists(Set<Playlist> playlists) {
this.playlists = playlists;
}
public Set<Playlist> getPlaylists() {
return playlists;
}
}
А вот производный класс:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = "users", schema = "musictinder")
public class JPAUserImpl extends UserImpl {
@Id @GeneratedValue private long id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Override
@Column(name = "user_name")
@AccessType(AccessType.Type.PROPERTY)
public String getUserName() {
return super.getUserName();
}
@Override
@Column(name = "password")
@AccessType(AccessType.Type.PROPERTY)
public String getPassword() {
return super.getPassword();
}
@Override
@Column(name = "security_question")
@AccessType(AccessType.Type.PROPERTY)
public String getSecurityQuestion() {
return super.getSecurityQuestion();
}
@Override
@Column(name = "security_question_answer")
@AccessType(AccessType.Type.PROPERTY)
public String getSecurityQuestionAnswer() {
return super.getSecurityQuestionAnswer();
}
@Override
@Column(name = "token")
@AccessType(AccessType.Type.PROPERTY)
public String getToken() {
return super.getToken();
}
@Override
@ElementCollection
@OneToMany(cascade = CascadeType.ALL)
@AccessType(AccessType.Type.PROPERTY)
public Set<Playlist> getPlaylists() {
return super.getPlaylists();
}
@Override
@ElementCollection
@OneToMany(cascade = CascadeType.ALL)
@AccessType(AccessType.Type.PROPERTY)
public List<UserProfile> getUserProfiles() {
return super.getUserProfiles();
}
}
Обновление: Я обнаружил, что Spring только жалуется на поле userName
.Когда я добавляю его в производный класс, приложение не падает.По некоторым причинам это просто работает с другими полями.Теперь я на самом деле запутался больше, чем раньше.