Я разрабатываю систему пользователя / пароля с EJB3.
У пользователя есть встроенный пароль.И у меня есть два вида паролей: пользовательские или нет.Поэтому у меня есть пароль суперкласса и его подкласс GeneratedPassword.Архитектура действительно спорная.
Вот "подписи":
@Entity
@NamedQueries({ //... })
@Table(name="UserAccount")
public class UserAccount implements Serializable {
@Id
@Email
private String email;
@Embedded
private Password password;
public UserAccount(String email) {
this.email = email;
this.password = new GeneratedPassword();
}
// ...
}
@Embeddable
public class Password implements Serializable {
private String encryptedPassword;
// ...
}
@Embeddable
public class GeneratedPassword extends Password {
private String tmpPassword;
// ...
}
Проблема в том, что у меня странное исключение (странное, потому что я его не понимаю ...):
Caused by: javax.persistence.EntityExistsException:
Exception Description: No subclass matches this class [class entities.user.GeneratedPassword] for this Aggregate mapping with inheritance.
Mapping: org.eclipse.persistence.mappings.AggregateObjectMapping[password]
Descriptor: RelationalDescriptor(entities.user.UserAccount --> [DatabaseTable(UserAccount)])
2-я часть:
Caused by: Exception [EclipseLink-126] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: No subclass matches this class [class entities.user.GeneratedPassword] for this Aggregate mapping with inheritance.
Mapping: org.eclipse.persistence.mappings.AggregateObjectMapping[password]
Descriptor: RelationalDescriptor(entities.user.UserAccount --> [DatabaseTable(UserAccount)])
Итак, из этих исключений я понимаю, что GeneratedPassword не распознается как сущность.Но если я использую класс Password, все работает нормально!Итак, я вернулся к состоянию непонимания ...
Кто-нибудь знает, как использовать встраиваемые объекты в иерархии?Это даже проблема ???