2014-10-01 18 views
1

我有休眠的问题......我已经尝试了所有的东西来解决这个过去的两天,我没有更多的想法...org.hibernate.exception.SQLGrammarException:Hibernate不会加入列

我有一个Mysql 5.0数据库并从实体中创建类。他们的 二:

@Entity 
@Table(name="products") 
@NamedQuery(name="Product.findAll", query="SELECT p FROM Product p") 
public class Product implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue 
    private Long idProduct; 


    @OneToOne() 
// @JoinTable(name="Tblmodeli") 
// @JoinColumn(name="idModel") These two lines are important 

    @NotFound(action = NotFoundAction.EXCEPTION) 
    private Model idmodel; 

    public Long getidProduct() { 
     return this.idProduct; 
    } 

    public void setidProduct(Long idProduct) { 
     this.idProduct= idProduct; 
    } 
public Model getIdmodel() { 
     return this.idmodel; 
    } 

    public void setIdmodel(Model idmodel) { 
     this.idmodel = idmodel; 
    } 
} 

第二张表:

@Entity 
@Table(name="model") 
@NamedQuery(name="model.findAll", query="SELECT t FROM model t") 
public class Model implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue 
    @Column(name="idModel") 
    private Long idModel; 

private String name; 

    public Long getIdModel() { 
     return this.idModel; 
    } 

    public void setIdModel(Long idModel) { 
     this.idModel = idModel; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public void setName(String name) { 
     this.name= name; 
    } 
} 

persistance.xml

<?xml version="1.0"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> 
    <persistence-unit name="SomeName" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>java:/mydb/</jta-data-source> 
<class>model.Products</class> 
<class>model.Model</class> 
<property name="hibernate.format_sql" value="true"/> 
<property name="use_sql_comments" value="true"/> 
<property name="hibernate.show_sql" value="true"/> 
<property name="javax.persistence.jdbc.driver" value="com.mysql"/> 
<property name="hibernate.max_fetch_depth" value="4"/> 
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/> 
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://MyLink"/> 
<property name="javax.persistence.jdbc.user" value="username"/> 
<property name="javax.persistence.jdbc.url.password" value="password"/> 

当我做这个命令

Product p= em.find(Product.class, 1L); 
String s=p.getIdmodel().getName(); 

我成为这个控制台:

select 
product0_.IDNormativa as idProduct1_806_, 
product0_.idmodel_idModel as idmodel59_806_ 
from 
products product0_ 
where 
product0_.productID = '1' 

12:19:38,293 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http-localhost-127.0.0.1-8080-2) SQL Error: 1054, SQLState: 42S22 
12:19:38,293 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http-localhost-127.0.0.1-8080-2) Unknown column 'product0_.idmodel_idModel' in 'field list' 
12:19:38,294 INFO [stdout] (http-localhost-127.0.0.1-8080-2) javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: Unknown column 'product0_.idmodel_idModel' in 'field list' 

当我去掉这两条线// @JoinTable(名称= “Tblmodeli”)// @JoinColumn(名称= “idModel”)我成为这样:

select 
product0_.IDNormativa as idProduct1_806_, 
product0_.idmodel_idModel as idmodel59_806_ 
from 
products product0_ 
left outer join 
Model product0_1_ 
on product0_.idProduct=product0_1_.idProduct 
//In this line i need on product0_.idmodel=product0_1_.idModel 
    where 
    product0_.idProduct= '1' 

12:27:35,546 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http-localhost-127.0.0.1-8080-1) SQL Error: 1054, SQLState: 42S22 
12:27:35,546 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http-localhost-127.0.0.1-8080-1) Unknown column 'product0_1_.idProduct' in 'on clause' 
12:27:35,547 INFO [stdout] (http-localhost-127.0.0.1-8080-1) javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: Unknown column 'product0_1_.idProduct' in 'on clause' 

我尝试了这些方言:

<!--<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> --> 
<!--<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect"/> --> 
<!--<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/> --> 

我已经使用mysql-connector-5.1.17.jar 该项目被部署在JBoss AS 7.1.1 我在同一个项目中,他们都取得了一定的OneToOne和一对多,不同的是日工作是很少mnore ......在JBoss文件夹中我有连接器,并在standalone.xml数据库和连接器

<datasources> 
    <datasource jta="true" jndi-name="java:/mydb/" pool-name="my_pool" enabled="true" use-java-context="true" use-ccm="true"> 
      <connection-url>jdbc:mysql://MyURI</connection-url> 
     <driver>mysql</driver> 
    <security> 
    <user-name>username</user-name> 
    <password>password</password> 
     </security> 
    <statement> 
    <prepared-statement-cache-size>100</prepared-statement-cache-size> 
      <share-prepared-statements>true</share-prepared-statements> 
    </statement> 
    </datasource> 
    <drivers> 
     <driver name="mysql" module="com.mysql"/> 
     <driver name="h2" module="com.h2database.h2"> 
      <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> 
     </driver> 
     </drivers> 
    </datasources> 

出于某种原因,休眠不加入的产品和型号的表... 有人能帮我? Thaks ...

回答

0

不确定是否可以修复它,但类名应该是Model而不是Model。

@NotFound(action = NotFoundAction.EXCEPTION) 
private Model**s** idmodel; 
+0

我编辑了那个....是写入失败... – xXxJAVAxXx 2014-10-01 11:09:42

0

你错过了hibernate.hbm2ddl.auto财产persistence.xml。另外property标签应该位于properties标签内。举例:

<?xml version="1.0"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> 
    <persistence-unit name="SomeName" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>java:/mydb/</jta-data-source> 

    <class>model.Products</class> 
    <class>model.Model</class> 
    <properties> <!-- **** --> 
     <!-- *** hbm2ddl.auto values: 'validate', 'update', 'create', 'create-drop' --> 
     <property name="hibernate.hbm2ddl.auto" value="update"/> <!-- *** --> 
     <property name="hibernate.format_sql" value="true"/> 
     .... 
     .... 

hibernate.hbm2ddl.autocould be

  • create:在每次运行
  • update建立一个新的数据库:修改现有的数据库
  • create-drop:意思是一样的 “创造”但在休眠关闭时也会丢弃表格
  • validate:不作任何更改到数据库

祝你好运!

+0

我无法在生产中使用hbm2ddl.auto值:通过此主题 http://stackoverflow.com/questions/438146/hibernate-hbm2ddl- auto-possible-values-and-what-they-do – xXxJAVAxXx 2014-10-01 11:18:24

+0

我每次都对数据库进行全部更改,并使表中的实体从JPA插件中获得日食... – xXxJAVAxXx 2014-10-01 11:21:01

+0

好的,对不起,我误解了这个问题。 – jmvivo 2014-10-01 11:33:11

0

你的人pojo /实体的字段不会出现在daoImpl的sql中,所以添加它。