【发布时间】:2013-07-16 06:40:21
【问题描述】:
我对实现接口的抽象类有疑问。 现在接口在我们的抽象类的实现中,而不是在其他实现中。 我将在这里向您展示代码:
@MappedSuperclass
public abstract class AbstractOrder {
@Id
@GeneratedValue
private Long idOrder;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="datum")
private Date date = new Date();
@OneToMany(targetEntity=IOrderLine.class)
private List<IOrderLine> orderLines = new ArrayList<IOrderLine>();
private String refOrder;
...
}
@Entity
@Table(name="supplyorders")
public class SupplyOrder extends AbstractOrder implements Comparable<SupplyOrder>, Serializable {
@ManyToOne
private Supplier supplier;
@Enumerated(EnumType.STRING)
private SupplyOrderStatus status = SupplyOrderStatus.TOBESUPPLIED;
@ElementCollection
private Set<CustomerOrder> customerOrders = new HashSet<CustomerOrder>();
...
}
@Entity
@Table(name="customerorders")
public class CustomerOrder extends AbstractOrder implements commparable<CustomerOrder>,Serializable {
@ManyToOne
private Customer customer;
@ManyToOne
private Place place;
@ManyToOne
private User vendor;
private double deposit;
@Enumerated(EnumType.STRING)
private OrderStatus status = OrderStatus.CREATED;
}
@MappedSuperclass
public interface IOrderLine {
double getSubTotal();
int getQuantity();
Furniture getFurniture();
}
@Entity
@Table(name="supplyorderlines")
public class SupplyOrderLine implements IOrderLine, Serializable {
@Id
@GeneratedValue
private Long id;
@OneToMany
private List<CustomerOrderLine> customerOrderLines = new ArrayList<CustomerOrderLine>();
...
}
当然还有一个实现 IOrderLine 的类 CustormerOrderLine。
现在对于 supplyOrder,他们有 supplyOrderLines,customerOrder 有 CustomerOrderLine。
我们得到的错误是抽象类不知道接口 IOrderLine 的实现。
如何在实现类中重写抽象类的orderLines字段,并通过注解指向IOrderLine的实现?
提前致谢。
寒冷的世界
【问题讨论】:
-
当你说“抽象类不知道接口 IOrderLine 采用什么实现...”时你是什么意思?我。抽象类如何“采用”接口?抽象类应该对它的子类一无所知。
-
它的 JPA 给出了错误原因 JPA 不知道他必须为 IorderLines 读取哪个表,supplyOrder 和 customerOrder 采用 IOrderLine 接口的不同实现和 thx 来格式化代码。
-
好的...我明白了。答案来了。
-
谢谢 jahroy,感谢您的帮助。
标签: java inheritance jpa interface abstract-class