2014-10-01 2 views
1

У меня есть проблемы с Hibernate ... Я пробовал все вещи, чтобы решить эти последние два дня, и у меня нет больше идей ...org.hibernate.exception.SQLGrammarException: спящий режим не присоединится столбец

I иметь базу данных 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-разъем-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> 

почему спящий режим не присоединиться к продукции и типовые таблицы ... Может кто-нибудь Помогите мне? Thaks ...

ответ

0

Не уверен, что это исправляет все, кроме названия класса, это Model, а не модели.

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

Я отредактировал это .... Был ли отказ записи ... – xXxJAVAxXx

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.auto значения could be:

  • create: создать новую базу данных при каждом запуске
  • update: изменить существующую базу данных
  • create-drop: означает то же самое, как "создать" но также уменьшает столы при закрытии Hibernate
  • validate: не вносит изменения в база данных

Удачи вам!

+0

Я не могу использовать это в производственных целях hbm2ddl.auto: по этой теме http://stackoverflow.com/questions/438146/hibernate-hbm2ddl- auto-possible-values-and-what-they-do – xXxJAVAxXx

+0

Я каждый раз вношу все изменения в базу данных и делаю сущности из таблиц с JPA-плагином для eclipse ... – xXxJAVAxXx

+0

Хорошо, я неправильно понял вопрос. – jmvivo

0

Ваше местное поле pojo/entity не отображается в sql daoImpl, поэтому добавьте его.