你好我想在hibernate 4.0中用注释做一对一的关系,我有这个错误。
Mar 15, 2014 11:45:09 PM
org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.4.Final}
Mar 15, 2014 11:45:09 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.3.0.Final}
Mar 15, 2014 11:45:09 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Mar 15, 2014 11:45:09 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Mar 15, 2014 11:45:09 PM org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml
Mar 15, 2014 11:45:09 PM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: /hibernate.cfg.xml
Mar 15, 2014 11:45:09 PM org.hibernate.internal.util.xml.DTDEntityResolveresolveEntity
WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
Mar 15, 2014 11:45:09 PM org.hibernate.cfg.Configuration doConfigure
INFO: HHH000041: Configured SessionFactory: null
Mar 15, 2014 11:45:09 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
Mar 15, 2014 11:45:10 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000227: Running hbm2ddl schema export
alter table Student_Details.Employee
drop
foreign key FK_fv5220moxm8v5ehji5yi2y9w3
drop table if exists Student_Details.Employee
drop table if exists Student_Details.EmployeeDetail
drop table if exists Student_Details.Student
create table Student_Details.Employee (
employeeid integer not null auto_increment,
employeename varchar(255),
empdetailid_fk integer,
primary key (employeeid)
)
create table Student_Details.EmployeeDetail (
employeedetailid integer not null auto_increment,
city varchar(255),
employeeDesgnation varchar(255),
salary integer not null,
primary key (employeedetailid)
)
create table Student_Details.Student (
studentId integer not null,
phoneNumber integer not null,
studentName varchar(255),
primary key (studentId)
)
alter table Student_Details.Employee
add constraint FK_fv5220moxm8v5ehji5yi2y9w3
foreign key (empdetailid_fk)
references Student_Details.EmployeeDetail (employeedetailid)
Mar 15, 2014 11:45:10 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000230: Schema export complete
Mar 15, 2014 11:45:10 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImplconfigure
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)
Mar 15, 2014 11:45:10 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImplbuildCreator
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL[jdbc:mysql://localhost:3307]
Mar 15, 2014 11:45:10 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImplbuildCreator
INFO: HHH000046: Connection properties: {user=root, password=****}
Mar 15, 2014 11:45:10 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImplbuildCreator
INFO: HHH000006: Autocommit mode: false
Mar 15, 2014 11:45:10 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImplconfigure
INFO: HHH000115: Hibernate connection pool size: 2 (min=1)
Mar 15, 2014 11:45:11 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
Mar 15, 2014 11:45:11 PM org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService
INFO: HHH000399: Using default transaction strategy (direct JDBC transactions)
Mar 15, 2014 11:45:11 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory<init>
INFO: HHH000397: Using ASTQueryTranslatorFactory
会议开幕了
2014年3月15日下午11:45:12 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
警告:SQL错误:1146,SQLState:42S02
2014年3月15日下午11:45:12 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
错误:表&#39; student_details.employeedetail&#39;不存在
线程&#34; main&#34;中的例外情况org.hibernate.exception.SQLGrammarException:无法在org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert上执行语句(SQLExceptionTypeDelegate.java:80)
在org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
在org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
在org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:190)
at org.hibernate.id.IdentityGenerator $ GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:96)
在org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:58)
在org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3032)
在org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3556)
在org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:97)
在org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:480)
at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:191)
在org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:175)
在org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:210)
at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:324)
在org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288)
在org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:194)
在org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114)
在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
在org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:680)
在org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:672)
在org.hibernate.engine.spi.CascadingActions $ 5.cascade(CascadingActions.java:235)
在org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:352)
在org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:295)
在org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:161)
在org.hibernate.engine.internal.Cascade.cascade(Cascade.java:118)
at org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:432)
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265)
在org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:194)
在org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
在org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
在org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:711)
在org.hibernate.internal.SessionImpl.save(SessionImpl.java:703)
在org.hibernate.internal.SessionImpl.save(SessionImpl.java:698)
在com.exp.oneToOne.TestEmployee.main(TestEmployee.java:14)
引起:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表&#39; student_details.employeedetail&#39;不存在
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
在com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
在com.mysql.jdbc.Util.getInstance(Util.java:386)
在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4237)
在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169)
在com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2617)
在com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778)
在com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2825)
在com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2156)
在com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2459)
在com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2376)
在com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2360)
在org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:187)
我的代码是:: -
Employee.java
package com.exp.oneToOne;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
@Entity
public class Employee {
private int employeeid;
private String employeename;
private EmployeeDetail emp_details;
public Employee() {
}
public Employee(String employeename, EmployeeDetail emp_details) {
this.employeename = employeename;
this.emp_details = emp_details;
}
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "empdetailid_fk")
public EmployeeDetail getEmp_details() {
return emp_details;
}
public void setEmp_details(EmployeeDetail emp_details) {
this.emp_details = emp_details;
}
@Id
@GeneratedValue
public int getEmployeeid() {
return employeeid;
}
public void setEmployeeid(int employeeid) {
this.employeeid = employeeid;
}
public String getEmployeename() {
return employeename;
}
public void setEmployeename(String employeename) {
this.employeename = employeename;
}
}
EmpolyeeDetails.java
package com.exp.oneToOne;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class EmployeeDetail {
private int employeedetailid;
private String employeeDesgnation;
private int salary;
private String city;
public EmployeeDetail() {
}
public EmployeeDetail(String employeeDesgnation,
int salary, String city) {
this.employeeDesgnation = employeeDesgnation;
this.salary = salary;
this.city = city;
}
@Id
@GeneratedValue
public int getEmployeedetailid() {
return employeedetailid;
}
public void setEmployeedetailid(int employeedetailid) {
this.employeedetailid = employeedetailid;
}
public String getEmployeeDesgnation() {
return employeeDesgnation;
}
public void setEmployeeDesgnation(String employeeDesgnation) {
this.employeeDesgnation = employeeDesgnation;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
TestEmpolyee.java
package com.exp.oneToOne;
import org.hibernate.Session;
import com.exp.first.MainConfig;
public class TestEmployee {
public static void main(String args[]) {
Session session = MainConfig.mainsessionFactory().openSession();
session.beginTransaction();
EmployeeDetail empdetail = new EmployeeDetail("CEO", 250000,
"Ahmedabad");
Employee emp = new Employee("Chirag", empdetail);
session.save(emp);
session.getTransaction().commit();
session.close();
}
}
hibernateconfigration文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//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.password">root</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3307</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.default_schema">Student_Details</property>
<property name="current_session_context_class">thread</property>
<property name="connection.pool_size">2</property>
</session-factory>
答案 0 :(得分:0)
您应该对每个@Table(name="table-name")
类使用@Entity
注释,例如
@Entity
@Table(name="employeedetail")
public class EmployeeDetail {
//Code inside your Entity class
}