2012-03-06 93 views
0

有沒有人有一個成功的hibernate.cfg.xml配置文件的例子,他們使用Hibernate 4和MySQL 5.1?我有一個Maven(v3.0.3)的Web項目,當我運行我的JUnit測試,測試失敗與例外,儘管該表中,用戶存在...用MySQL 5.1配置Hibernate 4的麻煩

org.hibernate.AnnotationException: @org.hibernate.annotations.Table references an unknown table: USERS 
    at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:875) 
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:710) 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3406) 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3360) 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1334) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1724) 
    at com.myco.eventmaven.dao.UsersDaoImpl.<init>(UsersDaoImpl.java:27) 
    at com.myco.eventmaven.dao.UsersDaoImplTest.setUpStaticVars(UsersDaoImplTest.java:19) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) 
    at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175) 
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68) 

這裏是我的hibernate.cfg .xml文件...

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
<session-factory> 
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/eventmaven</property> 
<property name="hibernate.connection.username">eventmaven</property> 
<property name="hibernate.connection.password">password</property> 
<property name="hibernate.connection.pool_size">10</property> 
<property name="show_sql">true</property> 
<property name="dialect">org.hibernate.dialect.MySQLDialect</property> 

<mapping class="com.myco.eventmaven.domain.Registration" /> 

</session-factory> 
</hibernate-configuration> 

什麼是好奇的是,我得到相同的異常,即使我更改URL,用戶名或密碼的絕對不正確的值。這裏是一流的,我試圖綁定到的聲明...

package com.myco.eventmaven.domain; 

import java.io.Serializable; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.validation.constraints.Size; 

import org.hibernate.annotations.Table; 
import org.hibernate.validator.constraints.Email; 
import org.hibernate.validator.constraints.NotEmpty; 

@Entity 
@Table(appliesTo = "USERS") 
public class Registration implements Serializable { 

@Id 
@Column(name = "ID") 
Integer id; 

@Column(name = "USERNAME") 
private String userName; 
@NotEmpty 
@Size(min = 4, max = 20) 
@Column(name = "PASSWORD") 
private String password; 
@NotEmpty 
private String confirmPassword; 
@NotEmpty 
private String salt; 
@NotEmpty 
@Email 
@Column(name = "EMAIL") 
private String email; 
@Column(name = "FIRST_NAME") 
private String firstName; 
@Column(name = "LAST_NAME") 
private String lastName; 

public void setUserName(String userName) { 
    this.userName = userName; 
} 

public String getUserName() { 
    return userName; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 

public String getPassword() { 
    return password; 
} 

public void setConfirmPassword(String confirmPassword) { 
    this.confirmPassword = confirmPassword; 
} 

public String getConfirmPassword() { 
    return confirmPassword; 
} 

public String getSalt() { 
    return salt; 
} 

public void setSalt(String salt) { 
    this.salt = salt; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

public String getEmail() { 
    return email; 
} 

public Integer getId() { 
    return id; 
} 

public void setId(Integer id) { 
    this.id = id; 
} 

public String getFirstName() { 
    return firstName; 
} 

public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 

public String getLastName() { 
    return lastName; 
} 

public void setLastName(String lastName) { 
    this.lastName = lastName; 
} 

} 

謝謝 - 戴夫

+0

1)您是否使用unix,以及2)它是否在JUnit之外工作?當您在Eclipse中運行測試時/您的web應用程序中,即問題只是maven還是無處不在? – 2012-03-06 23:14:20

回答

5

該表確實存在,但我使用的註釋是錯誤的。我需要使用註釋

@Table(name = "USERS") 

其中@Table是從import javax.persistence.Table;中導入的。 @Table從org.hibernate包中導入之前就搞亂了。

0

你不必與連接問題 - 您登錄是明確的:沒有USERS表。 爲什麼在另一個文件中使用@Table(appliesTo =「USERS」),至少最好在它的實體定義之前定義它。

您沒有包含在hibernate映射文件中的表用戶。

@Table API

0

您可能使用某些操作系統可以具有區分大小寫的問題,表名可以是殼體在MySQL敏感。從8.2.2. Identifier Case Sensitivity(我的重點):

在MySQL中,數據庫對應目錄中的數據 目錄中。數據庫中的每個表對應於數據庫目錄中的至少一個 文件(並且可能更多,取決於存儲引擎的 )。觸發器也對應於文件。因此,底層操作系統的區分大小寫在數據庫,表和觸發器名稱的區分大小寫中扮演着一個部分 。 這個 意味着這樣的名稱在Windows中不區分大小寫,但是在大多數Unix中敏感的情況是 。一個值得注意的例外是Mac OS X,它基於Unix,但使用的默認文件系統類型(HFS +) 不區分大小寫。但是,Mac OS X還支持UFS卷( ),它們在任何Unix上都區分大小寫。請參見第1.8.4節, 「MySQL標準SQL擴展」。系統變量也會影響服務器如何處理標識符案例 的敏感性。

所以檢查表名,檢查它們是如何被初始創建的。鏈接頁面有多個關於如何處理這個問題的選項。