У меня проблема с абстрактным классом, где мы реализуем интерфейс. Теперь интерфейс находится в нашей реализации абстрактного класса, отличного от другой реализации. я покажу вам код здесь:java: расширенное наследование для jpa
@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>();
...
}
и конечно класс CustormerOrderLine, который реализует IOrderLine.
Теперь у поставщиков поставки есть запасные листы в них, а у customerOrder есть CustomerOrderLine.
Ошибка, которую мы получаем, заключается в том, что абстрактный класс не знает, какую реализацию следует использовать для интерфейса IOrderLine.
Как я могу переопределить поле orderLines из абстрактного класса класса реализации и указать на реализацию IOrderLine с аннотациями?
Thx заранее.
Chillworld
Что вы имеете в виду, когда говорите: «абстрактный класс не знает, какую реализацию следует использовать для интерфейса IOrderLine ...». Это не имеет для меня никакого смысла. Как абстрактный класс «_take_» является интерфейсом? Абсолютный класс должен знать ** ничего ** о своих подклассах. – jahroy
Его JPA, которая дает ошибку, приводит к тому, что JPA не знает, какую таблицу он должен читать для IorderLines, supplyOrder и customerOrder использует различную реализацию интерфейса IOrderLine и thx для форматирования кода. – chillworld
Хорошо ... Я понял. Отвечаю. – jahroy