Основная идея заключается в том, что есть две таблицы (
Код: Выделить всё
pendingКод: Выделить всё
Policy (the policy)
|
+ -- Pending (maker information)
|
+ -- Approved (checker information)
< /code>
Итак, политика класса < /code> - это класс, который определяет необходимые поля для политики. Чтобы сохранить этот пост короче, поля не показаны. < /P>
@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) // problem
public abstract class Policy { ... }
Код: Выделить всё
@Entity
@Table(name = "pending")
public class Pending extends Policy {
@Column(name = "adder", ...)
private String adder;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "time_added", ...)
private Date timeAdded;
}
< /code>
Утвержденный класс < /code> предназначен для утвержденных объектов и содержит дополнительную информацию о утверждении в дополнение к информации из ожидаемого < /code> класса. < /p>
@Entity
@Table(name = "approved")
public class Approved extends Pending {
@Column(name = "approver", ...)
private String approver;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "time_approved", ...)
private Date timeApproved;
}
< /code>
Моя первая мысль была попробовать table_per_class < /code>. Тем не менее, это привело к следующей ошибке времени выполнения: org.hibernate.mappingException: не может использовать генерацию ключей столбца идентификатора с отображение для: ... Currently, my solution is to as follows, which is basically copy and paste the code from the Pending class into the Approved class.
@Entity
@Table(name = "approved")
public class Approved extends Policy {
@Column(name = "adder", ...)
private String adder;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "time_added", ...)
private Date timeAdded;
@Column(name = "approver", ...)
private String approver;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "time_approved", ...)
private Date timeApproved;
}
< /code>
Это решение кажется непреодолимым, поскольку оно дублирует код. Существует ли решение, которое не требует дупликации кода и сохраняет процесс проверки производителя таким образом, в настоящее время оно работает?
Подробнее здесь: https://stackoverflow.com/questions/208 ... nheritance