有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何解决一对一关系的hibernate jpa错误?

您好,我正在尝试在Hibernate4.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下午组织。冬眠发动机jdbc。spi。SqlExceptionHelper日志异常 警告:SQL错误:1146,SQLState:42S02 2014年3月15日11:45:12下午组织。冬眠发动机jdbc。spi。SqlExceptionHelper日志异常 错误:表“学生详细信息”。“employeedetail”不存在 线程“main”组织中出现异常。冬眠例外SQLGrammarException:无法在组织上执行语句。冬眠例外内部的SQLExceptionTypeDelegate。转换(SQLExceptionTypeDelegate.java:80) 在org。冬眠例外内部的标准SQLExceptionConverter。转换(StandardSQLExceptionConverter.java:49) 在org。冬眠发动机jdbc。spi。SqlExceptionHelper。转换(SqlExceptionHelper.java:126) 在org。冬眠发动机jdbc。spi。SqlExceptionHelper。转换(SqlExceptionHelper.java:112) 在org。冬眠发动机jdbc。内部的结果TRETRETURNIMPL。executeUpdate(ResultSetReturnImpl.java:190) 在org。冬眠id.IdentityGenerator$GetGeneratedKeysDelegate。executeAndExtract(IdentityGenerator.java:96) 在org。冬眠id.insert。AbstractReturningDelegate。performInsert(AbstractReturningDelegate.java:58) 在org。冬眠坚持者。实体AbstractEntityPersister。插入(AbstractEntityPersister.java:3032) 在org。冬眠坚持者。实体AbstractEntityPersister。插入(AbstractEntityPersister.java:3556) 在org。冬眠行动内部的实体标识插入。执行(EntityIdentityInsertAction.java:97) 在org。冬眠发动机spi。动作队列。执行(ActionQueue.java:480) 在org。冬眠发动机spi。动作队列。addResolvedEntityInsertAction(ActionQueue.java:191) 在org。冬眠发动机spi。动作队列。addInsertAction(ActionQueue.java:175) 在org。冬眠发动机spi。动作队列。addAction(ActionQueue.java:210) 在org。冬眠事件内部的AbstractSaveEventListener。addInsertAction(AbstractSaveEventListener.java:324) 在org。冬眠事件内部的AbstractSaveEventListener。performSaveOrReplicate(AbstractSaveEventListener.java:288) 在org。冬眠事件内部的AbstractSaveEventListener。performSave(AbstractSaveEventListener.java:194) 在org。冬眠事件内部的AbstractSaveEventListener。SaveWithGenerateId(AbstractSaveEventListener.java:125) 在org。冬眠事件内部的DefaultSaveOrUpdateEventListener。saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209) 在org。冬眠事件内部的DefaultSaveOrUpdateEventListener。entityIsTransient(DefaultSaveOrUpdateEventListener.java:194) 在org。冬眠事件内部的DefaultSaveOrUpdateEventListener。performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114) 在org。冬眠事件内部的DefaultSaveOrUpdateEventListener。onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 在org。冬眠内部的SessionImpl。fireSaveOrUpdate(SessionImpl.java:680) 在org。冬眠内部的SessionImpl。saveOrUpdate(SessionImpl.java:672) 在org。冬眠发动机spi。卡斯卡迪加5美元。级联(CascadingActions.java:235) 在org。冬眠发动机内部的大量cascadeToOne(Cascade.java:352) 在org。冬眠发动机内部的大量级联关联(Cascade.java:295) 在org。冬眠发动机内部的大量cascadeProperty(Cascade.java:161) 在org。冬眠发动机内部的大量cascade(cascade.java:118) 在org。冬眠事件内部的AbstractSaveEventListener。cascadeBeforeSave(AbstractSaveEventListener.java:432) 在org。冬眠事件内部的AbstractSaveEventListener。performSaveOrReplicate(AbstractSaveEventListener.java:265) 在org。冬眠事件内部的AbstractSaveEventListener。performSave(AbstractSaveEventListener.java:194) 在org。冬眠事件内部的AbstractSaveEventListener。SaveWithGenerateId(AbstractSaveEventListener.ja弗吉尼亚州:125) 在org。冬眠事件内部的DefaultSaveOrUpdateEventListener。saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209) 在org。冬眠事件内部的DefaultSaveEventListener。saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55) 在org。冬眠事件内部的DefaultSaveOrUpdateEventListener。entityIsTransient(DefaultSaveOrUpdateEventListener.java:194) 在org。冬眠事件内部的DefaultSaveEventListener。performSaveOrUpdate(DefaultSaveEventListener.java:49) 在org。冬眠事件内部的DefaultSaveOrUpdateEventListener。onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 在org。冬眠内部的SessionImpl。fireSave(SessionImpl.java:711) 在org。冬眠内部的SessionImpl。保存(SessionImpl.java:703) 在org。冬眠内部的SessionImpl。保存(SessionImpl.java:698) 在com。实验一。雇员。main(TestEmployee.java:14) 原因:com。mysql。jdbc。例外情况。jdbc4。MySQLSyntaxErrorException:表'student\u详细信息。“employeedetail”不存在 在太阳下。反映国家结构附件MPL。newInstance0(本机方法) 在太阳下。反映国家结构附件MPL。newInstance(未知源) 在太阳下。反映删除构造函数或AccessorImpl。newInstance(未知源) 在爪哇。朗。反思。构造器。newInstance(未知源) 在com。mysql。jdbc。Util。HandleneInstance(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。连接mpl。execSQL(ConnectionImpl.java:2825) 在com。mysql。jdbc。准备好的声明。executeInternal(PreparedStatement.java:2156) 在com。mysql。jdbc。准备好的声明。executeUpdate(PreparedStatement.java:2459) 在com。mysql。jdbc。准备好的声明。executeUpdate(PreparedStatement.java:2376) 在com。mysql。jdbc。准备好的声明。executeUpdate(PreparedStatement.java:2360) 在org。冬眠发动机jdbc。内部的结果TRETRETURNIMPL。executeUpdate(ResultSetReturnImpl.java:187)

。。。37多

我的代码是::-

雇员。爪哇

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。爪哇

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;
}
}

测试对象。爪哇

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>


共 (1) 个答案

  1. # 1 楼答案

    应该对@Table(name="table-name")类使用@Entity注释,比如

    @Entity
    @Table(name="employeedetail")
    public class EmployeeDetail {
    
    //Code inside your Entity class
    
    }