I have several classes that we are trying to extend to reuse code, but sleep mode has nothing. Here are the new classes and their extensions:
Super Operator Class
@MappedSuperclass
public abstract class CoreStatement<S extends Approval>
implements java.io.Serializable
{
public abstract Long getId();
public abstract void setId(Long id);
public abstract Set<S> getApprovals();
public abstract void setApprovals(Set<S> approvals);
}
The base operator class . This will expand later, but through one table inheritance
@Entity
@Table(name="EXPNS_STTMNT")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="CLASS_ID",
discriminatorType = DiscriminatorType.INTEGER
)
public abstract class ExpenseStatement extends CoreStatement<ExpenseApproval>
{
private Set<ExpenseApproval> approvals;
@Override
@Id
@Column(name="ID", unique=true, nullable=false, precision=10, scale=0)
public Long getId() {
return this.id;
}
@Override
public void setId(Long id) {
this.id = id;
}
@Override
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="statement",
targetEntity = ExpenseApproval.class)
public Set<ExpenseApproval> getApprovals() {
return approvals;
}
public void setApprovals(Set<ExpenseApproval> approvals) {
this.approvals = approvals;
}
}
Approve class super
@MappedSuperclass
public abstract class Approval<T extends CoreStatement> implements java.io.Serializable {
public abstract Long getId();
public abstract void setId(Long id);
public abstract T getStatement();
public abstract void setStatement(T statement);
}
Standard base class
@Entity
@Table(name="APPRVL")
public class ExpenseApproval extends Approval<ExpenseStatement>{
private Long id;
private ExpenseStatement statement;
@Id
@Column(name="ID", unique=true, nullable=false, precision=10, scale=0)
public Long getId() {
return this.id;
}
@Override
public void setId(Long id) {
this.id = id;
}
@Override
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="EXPENSE_STATEMENT_ID", nullable=true)
public ExpenseStatement getStatement() {
return statement;
}
@Override
public void setStatement(ExpenseStatement statement) {
this.statement= statement;
}
}
When starting UnitTests, we get an error:
java.lang.ExceptionInInitializerError : org.hibernate.MappingException: : java.util.Set, : EXPNS_STTMNT, : [org.hibernate.mapping.Column()] org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:314) org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:292) ....
, , . , , , , , .. , , , . - - , ?