Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-JPA/Hibernate:;MappingException:无法确定类型";_Java_Spring_Hibernate_Jpa_H2 - Fatal编程技术网

Java-JPA/Hibernate:;MappingException:无法确定类型";

Java-JPA/Hibernate:;MappingException:无法确定类型";,java,spring,hibernate,jpa,h2,Java,Spring,Hibernate,Jpa,H2,我是Java/Spring/Hibernate新手,我正在为假设的快递服务构建一个小测试项目。 我现在尝试使用javax.persistence/hibernate实现一个数据库,但在尝试运行该项目时出现错误: Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.

我是Java/Spring/Hibernate新手,我正在为假设的快递服务构建一个小测试项目。
我现在尝试使用javax.persistence/hibernate实现一个数据库,但在尝试运行该项目时出现错误:

Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not determine type for: courier.order.OrderState, at table: order, for columns: [org.hibernate.mapping.Column(accepted_state)]
这是我的
订单
-类的代码。它通过
OrderState
-接口实现状态设计模式

package courier.order;

import courier.states.*;

import javax.persistence.*;


@Entity
public class Order implements OrderState{

    @Id 
    @GeneratedValue
    public Long id;

    @Column(nullable = false)
    public String deliverer;

    @Column(nullable = false)
    public String customer;

    @Column(nullable = false)
    public String customerStreet;

    @Column(nullable = false)
    public String customerNumber;

    @Column(nullable = false)
    public String customerZip;

    @Column(nullable = false)
    public String deliveree;

    @Column(nullable = false)
    public String deliverStreet;

    @Column(nullable = false)
    public String deliverNumber;

    @Column(nullable = false)
    public String deliverZip;


    //attribute-setters

    public void setDeliverer(String newDeliverer){
        deliverer = newDeliverer;
    }
    public void setCustomer(String newCustomer){
        customer = newCustomer;
    }
    public void setCustomerStreet(String newCustomerStreet){
        customerStreet = newCustomerStreet;
    }
    public void setCustomerNumber(String newCustomerNumber){
        customerNumber = newCustomerNumber;
    }
    public void setCustomerZip(String newCustomerZip){
        customerZip = newCustomerZip;
    }
    public void setDeliveree(String newDeliveree){
        deliveree = newDeliveree;
    }
    public void setDeliverStreet(String newDeliverStreet){
        deliverStreet = newDeliverStreet;
    }
    public void setDeliverNumber(String newDeliverNumber){
        deliverNumber = newDeliverNumber;
    }
    public void setDeliverZip(String newDeliverZip){
        deliverZip = newDeliverZip;
    }

    //attribute-getter

    public String getDeliverer(){
        return deliverer;
    }
    public String getCustomer(){
        return customer;
    }
    public String getCustomerStreet(){
        return customerStreet;
    }
    public String getCustomerNumber(){
        return customerNumber;
    }
    public String getCustomerZip(){
        return customerZip;
    }
    public String getDeliveree(){
        return deliveree;
    }
    public String getDeliverStreet(){
        return deliverStreet;
    }
    public String getDeliverNumber(){
        return deliverNumber;
    }
    public String getDeliverZip(){
        return deliverZip;
    }

    //define states
    OrderState newState;
    OrderState acceptedState;
    OrderState inDeliveryState;
    OrderState deliveredState;
    OrderState canceledState;

    //saved state
    OrderState orderState;

    //constructor
    public Order() {
        //initialize states
        newState = new NewState(this);
        acceptedState = new AcceptedState(this);
        inDeliveryState = new InDeliveryState(this);
        deliveredState = new DeliveredState(this);
        canceledState = new CanceledState(this);

        //Initial state
        orderState = newState;
    }


    //State - getter
    public OrderState getNewState() { return newState; }
    public OrderState getAcceptedState() { return acceptedState; }
    public OrderState getInDeliveryState() { return inDeliveryState; }
    public OrderState getDeliveredState() { return deliveredState; }
    public OrderState getCanceledState() { return canceledState; }

    //State - setter
    public void setOrderState(OrderState newOrderState) {
        orderState = newOrderState;
    }

    //methods
    public void newOrder() {
        setOrderState(newState);
    }

    public String getStatus() {
        return orderState.getStatus();
    }

    public void nextStatus() {
        orderState.nextStatus();
    }

    public void cancelOrder() {
        orderState.cancelOrder();
    }

}
OrderState接口:

package courier.order;

public interface OrderState {

    public String getStatus();
    public void nextStatus();
    public void cancelOrder();

}
其中一个州,其他州都是以同样的方式建造的:

package courier.order.states;

import courier.order.Order;
import courier.order.OrderState;

public class AcceptedState implements OrderState {

    Order orderState;

    public AcceptedState(Order newState){
        orderState = newState;
    }


    @Override
    public String getStatus() {
        return "The order was accepted and is being collected by a deliverer.";
    }

    @Override
    public void nextStatus() {
        orderState.setOrderState(orderState.getInDeliveryState());
    }

    @Override
    public void cancelOrder() {

    }
}

当我注释掉
@Entity
-annotation

时,代码运行得完美无缺。它看起来像是一个设计缺陷。我建议您避免使用
OrderState
interfacethanks作为回复!你所说的设计流程是什么意思?实现接口和创建JPA实体是否有问题?首先,实体类中很少有接口。此外,该接口的另一个实现(AcceptedState)根本不是实体。接下来,OrderState包含订单状态。此外,嵌套的订单状态没有任何注释标记。我建议您考虑一下模型结构,尽量使其保持平面(没有嵌套实体),并避免不必要的接口使用。不要将实体称为“顺序”。Order是一个sql关键字,可能会给您一些奇怪的错误消息。您可以在@table注释中定义一个具体的表名,如“t_order”。接口不仅在实体中不常见,甚至是不允许的!