Я пытаюсь понять, как лучше всего реализовать полиморфный one-many в, в спящем режиме.
Например:
@MappedSuperclass
public class BaseEntity {
Integer id;
// etc...
}
@Entity
public class Author extends BaseEntity {}
@Entity
public class Post extends BaseEntity {}
@Entity
public class Comment extends BaseEntity {}
И теперь, я хотел бы также сохранить информацию об аудите со следующим классом:
@Entity
public class AuditEvent {
@ManyToOne // ?
BaseEntity entity;
}
Для чего отображается соответствующее auditEvent.entity
? Кроме того, как Будет в спящем режиме, на самом деле сохраняют это? Был бы ряд объединяющих таблиц быть сгенерированным (AuditEvent_Author
, AuditEvent_Post
, AuditEvent_Comment
), или есть ли лучший путь?
Отметьте, у меня не было бы своих других классов объекта, подвергают другую сторону соединения (например, List<AuditEvent> events
на BaseEntity
) - но если это - самый чистый способ реализовать, затем он будет достаточен.
Отображенный суперкласс не является сущностью и, следовательно, не может быть частью ассоциации (как указано в EJB-199 ). Так что либо:
BaseEntity
абстрактным и используйте стратегию TABLE_PER_CLASS
(см. Этот предыдущий ответ ) AuditableEntity
entity в иерархии и используйте наиболее подходящую стратегию наследования для вашего варианта использования.