无效的对象名称';客户订单';?带注释问题的Spring MVC Hibernate
我刚开始冬眠。我有DB中的订单和账目表无效的对象名称';客户订单';?带注释问题的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_
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");