无效的对象名称';客户订单';?带注释问题的Spring MVC Hibernate

无效的对象名称';客户订单';?带注释问题的Spring MVC Hibernate,hibernate,spring,spring-mvc,hibernate-mapping,hibernate-annotations,Hibernate,Spring,Spring Mvc,Hibernate Mapping,Hibernate Annotations,我刚开始冬眠。我有DB中的订单和账目表 CREATE TABLE [dbo].[ORDERS]( [PRICE] [decimal](12, 2) NULL, [ORDERID] [int] IDENTITY(0,1) NOT NULL, [ACCOUNT_ACCOUNTID] [int] NULL, CONSTRAINT [PK_ORDER] PRIMARY KEY CLUSTERED ( [ORDERID] ASC )WITH ( STATISTICS_

我刚开始冬眠。我有DB中的订单和账目表

CREATE TABLE [dbo].[ORDERS](
    [PRICE] [decimal](12, 2) NULL,
    [ORDERID] [int] IDENTITY(0,1) NOT NULL,
    [ACCOUNT_ACCOUNTID] [int] NULL,
 CONSTRAINT [PK_ORDER] PRIMARY KEY CLUSTERED 
(
    [ORDERID] ASC
)WITH (  STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF )  
)  
科目表:

CREATE TABLE [dbo].[ACCOUNT](
    [BALANCE] [decimal](12, 2) NULL,
    [ACCOUNTID] [int] IDENTITY(0,1) NOT NULL,
    [PROFILE_USERID] [varchar](250) NULL,
 CONSTRAINT [PK_ACCOUNT] PRIMARY KEY CLUSTERED 
(
    [ACCOUNTID] ASC
)WITH (  STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF )  
)
我正在尝试一对多映射一个帐户有许多订单。我有以下课程:

@Table(name="ACCOUNT")
public class Account implements Serializable, IEntity{

    private static final long serialVersionUID = 1L;
    private int accountID;
    private double balance;
    private List<Order> orders; 

    @Id
    @GeneratedValue
    public int getAccountID() {
        return accountID;
    }
public void setAccountID(int accountID) {
    this.accountID = accountID;
}

public double getBalance() {
    return balance;
}
public void setBalance(double balance) {
    this.balance = balance;
}

@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinColumn(name = "ACCOUNT_ACCOUNTID",nullable=false,insertable=true,updatable=true)
public List<Order> getOrders()
{
    return orders;
}  
public void setOrders(List<Order> orders)
    {
        this.orders = orders;
    }       
}
但当我尝试使用以下HQL访问HibernateTemplate的列表方法时:

SQL_QUERY =" from Account as a where a.balance='"+bal+"'";
它给了我以下选择:

(JDBCExceptionReporter.java:72) - Invalid object name 'ACCOUNT_orders'.

java.lang.NullPointerException
    at com.microsoft.trade.service.TradeServiceImplementor.loginVerify(TradeServiceImplementor.java:59)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

请帮帮我。提前感谢。

您在这里有一个双向的一对一关联:一个帐户有多个订单,一个订单有一个帐户。其中一个关联与另一个关联相反。因此,您必须在一侧(通常是多方:这是JPA强制要求的)定义此关联的映射,并声明该关联是另一侧(一侧)另一关联的逆关联:


@JB它不起作用,它说:org.hibernate.AnnotationException:元素集合不能有mappedBy或关联引用未映射的实体:com.trade.model.Account.Order是否用javax.persistence.entity注释了Order类?是的,两个类(Account和Order)是否确定实体的导入语句是javax.persistence.Entity,而不是org.hibernate.annotations.Entity?这些实体是否在hibernate.cfg.xml文件中声明?如果不是这样,请编辑您的问题并添加新代码。
(JDBCExceptionReporter.java:72) - Invalid object name 'ACCOUNT_orders'.

java.lang.NullPointerException
    at com.microsoft.trade.service.TradeServiceImplementor.loginVerify(TradeServiceImplementor.java:59)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
@Entity
public class Account implements Serializable, IEntity{
    // ...
    private List<Order> orders; 

    // mappedBy is used to indicate that this association is the inverse of the association
    // mapped by the account property of the Order entity
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="account")
    public List<Order> getOrders() {
        return orders;
    }       
}

@Entity
public class Order implements Serializable, IEntity {
    // ...
    // a relationship to another entity is never mapped by @Column. You can't have annotations 
    // on the field and the getter. Choose one or the other, and be consistent for all 
    // the properties of the entity
    private Account account; 

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "ACCOUNT_ACCOUNTID")
    public Account getAccount() {
        return account;
    }  
}
String hql = "from Account a where a.balance = :theBalance";
Query query = session.createQuery();
query.setParameter("theBalance", new BigDecimal("12.5");