jpa is not mapped

假设我们的表结构为:(mysql)

Sql代码
CREATE TABLE `t_creditcard` (   
  `id` int(11) NOT NULL auto_increment,   
  `cardName` varchar(20) NOT NULL,   
  PRIMARY KEY  (`id`)   
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
CREATE TABLE `t_creditcard` (
  `id` int(11) NOT NULL auto_increment,
  `cardName` varchar(20) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


写法一:

Java代码
@Entity  
public class CreditCard{   
   private Long id;   
   private String name;   
}   
  
//测试代码1   
CreditCard cc = new CreditCard();   
cc.setCardName("测试卡");   
cc = ccDao.persist(cc); 
@Entity
public class CreditCard{
   private Long id;
   private String name;
}

//测试代码1
CreditCard cc = new CreditCard();
cc.setCardName("测试卡");
cc = ccDao.persist(cc);

日志输出Hibernate: insert into CreditCard (cardName, id) values (?, ?)
该写法适用于表名和实体类名相同,如果表名和类名不用,该写法则不能正确插入。

写法二:

Java代码
@Entity(name="t_creditcard")   
public class CreditCard{   
   private Long id;   
   private String name;   
}   
  
//如果你的dao中有类似的查询   
//测试代码2   
session.createQuery("from CreditCard c where c.id=10001").list();   
//测试代码3   
session.createQuery("from t_creditcard c where c.id=10001").list(); 
@Entity(name="t_creditcard")
public class CreditCard{
   private Long id;
   private String name;
}

//如果你的dao中有类似的查询
//测试代码2
session.createQuery("from CreditCard c where c.id=10001").list();
//测试代码3
session.createQuery("from t_creditcard c where c.id=10001").list();



测试代码1日志输出为:Hibernate: insert into t_creditcard (cardName, id) values (?, ?),可以正确插入。
测试代码2日志输出为:org.springframework.orm.hibernate3.HibernateQueryException: CreditCard is not mapped [from CreditCard c where c.id=10001];
所以@Entity 的name对应的是实体别名。
测试代码3通过。

所以如果你的库表名和你的实体类名不同而且还想在使用HQL或者JPQL的话,正确的方法应该是:

Java代码
@Entity  
@Table(name="t_creditcard")   
public class CreditCard{} 
@Entity
@Table(name="t_creditcard")
public class CreditCard{}

该写法以上测试全部通过。

你可能感兴趣的:(C++,c,Hibernate,C#,jpa)