【问题标题】:org.hibernate.exception.SQLGrammarException: hibernate will not join columnorg.hibernate.exception.SQLGrammarException: hibernate 不会加入列
【发布时间】:2017-02-27 11:18:57
【问题描述】:

我的休眠有问题...过去两天我已经尝试了所有方法来解决,但我没有更多想法...

我有一个 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(name="Tblmodeli") // @JoinColumn(name="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 和 OneToMany,除了这个和少数 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>

由于某种原因休眠不加入产品和模型表... 有人能帮我吗? 谢谢...

【问题讨论】:

    标签: java hibernate jpa jboss7.x mysql-connector


    【解决方案1】:

    不确定这是否能解决所有问题,但类名应该是 Model 而不是 Models。

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

    【讨论】:

      【解决方案2】:

      您错过了persistence.xml 中的hibernate.hbm2ddl.auto 属性。 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.auto 值could be:

      • create:每次运行都建立一个新数据库
      • update:修改现有数据库
      • create-drop: 与“创建”相同,但在 Hibernate 关闭时也会删除表
      • validate: 不对数据库做任何改动

      祝你好运!

      【讨论】:

      • 我不能在生产中使用这个 hbm2ddl.auto 值:by this topic stackoverflow.com/questions/438146/…
      • 我每次都在数据库中进行所有更改,并使用 Eclipse 的 JPA 插件从表中创建实体...
      • 好的,对不起,我误解了这个问题。
      【解决方案3】:

      你的某人 pojo/entity 的字段没有出现在 daoImpl 的 sql 中,所以添加它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-16
        • 2017-11-22
        • 2012-03-02
        • 1970-01-01
        • 1970-01-01
        • 2014-12-31
        相关资源
        最近更新 更多