Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 非主键联接列上的OneTONE映射_Mysql_Hibernate - Fatal编程技术网

Mysql 非主键联接列上的OneTONE映射

Mysql 非主键联接列上的OneTONE映射,mysql,hibernate,Mysql,Hibernate,这是我的person实体,我希望person选项卡映射到person\u contact\u number表,并使用person\u contact\u number表的person\u id(外键)映射到person表的id列 这是我的测试课 既然您已经映射了这两个实体及其关系,我猜您在启动时会出错?如果是的话,介意把它添加到问题中吗?嗨,我已经更新了我的测试类。我已经在代码中添加了堆栈跟踪。提前谢谢我猜这是从额外的personId字段中得到的。如果不需要直接读取id,只需将其删除即可(映射

这是我的person实体,我希望person选项卡映射到person\u contact\u number表,并使用person\u contact\u number表的person\u id(外键)映射到person表的id列
这是我的测试课
既然您已经映射了这两个实体及其关系,我猜您在启动时会出错?如果是的话,介意把它添加到问题中吗?嗨,我已经更新了我的测试类。我已经在代码中添加了堆栈跟踪。提前谢谢我猜这是从额外的
personId
字段中得到的。如果不需要直接读取id,只需将其删除即可(映射将自动创建联接列)。不,仍然会出现相同的错误。WARN 2014-04-19 22:21:20771[main](SqlExceptionHelper.java:145)(logExceptions)-SQL错误:1048,SQLState:23000错误2014-04-19 22:21:20771[main](SqlExceptionHelper.java:147)(logExceptions)-列“PERSON_ID”不能为空
package com.mckenzie;

import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name = "person")
public class Person implements Serializable
{
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    @Column(name = "ID")
    private Long id;

    @Column(name = "CODE")
    private String code;

    @Column(name = "INITIALS")
    private String initials;

    @Column(name = "FIRST_NAME")
    private String firstName;

    @Column(name = "MIDDLE_NAME")
    private String middleName;

    @Column(name = "LAST_NAME")
    private String lastName;

    @Column(name = "GENDER")
    private String gender;

    @Column(name = "DATE_OF_BIRTH")
    private Date dateOfBirth;

    @Column(name = "NATIONALITY")
    private String nationality;

    @Column(name = "CREATED_ON")
    private Timestamp createdOn;

    @Column(name = "MODIFIED_ON")
    private Timestamp modifiedOn;

    @Column(name = "CREATED_BY")
    private Long createdBy;

    @Column(name = "MODIFIED_BY")
    private Long modifiedBy;

    @Column(name = "DELETE_FLAG")
    private String deleteFlag;

    @OneToOne(mappedBy = "person", cascade = CascadeType.ALL)
    @JoinColumn(name = "ID")
    private PersonContactNumber personContactNumber;

    public Person()
    {
    super();
    }

    /** @return the id */
    public Long getId()
    {
    return id;
    }

    /** @param id
     *            the id to set */
    public void setId(Long id)
    {
    this.id = id;
    }

    /** @return the code */
    public String getCode()
    {
    return code;
    }

    /** @param code
     *            the code to set */
    public void setCode(String code)
    {
    this.code = code;
    }

    /** @return the initials */
    public String getInitials()
    {
    return initials;
    }

    /** @param initials
     *            the initials to set */
    public void setInitials(String initials)
    {
    this.initials = initials;
    }

    /** @return the firstName */
    public String getFirstName()
    {
    return firstName;
    }

    /** @param firstName
     *            the firstName to set */
    public void setFirstName(String firstName)
    {
    this.firstName = firstName;
    }

    /** @return the middleName */
    public String getMiddleName()
    {
    return middleName;
    }

    /** @param middleName
     *            the middleName to set */
    public void setMiddleName(String middleName)
    {
    this.middleName = middleName;
    }

    /** @return the lastName */
    public String getLastName()
    {
    return lastName;
    }

    /** @param lastName
     *            the lastName to set */
    public void setLastName(String lastName)
    {
    this.lastName = lastName;
    }

    /** @return the gender */
    public String getGender()
    {
    return gender;
    }

    /** @param gender
     *            the gender to set */
    public void setGender(String gender)
    {
    this.gender = gender;
    }

    /** @return the dateOfBirth */
    public Date getDateOfBirth()
    {
    return dateOfBirth;
    }

    /** @param dateOfBirth
     *            the dateOfBirth to set */
    public void setDateOfBirth(Date dateOfBirth)
    {
    this.dateOfBirth = dateOfBirth;
    }

    /** @return the nationality */
    public String getNationality()
    {
    return nationality;
    }

    /** @param nationality
     *            the nationality to set */
    public void setNationality(String nationality)
    {
    this.nationality = nationality;
    }

    /** @return the createdOn */
    public Timestamp getCreatedOn()
    {
    return createdOn;
    }

    /** @param createdOn
     *            the createdOn to set */
    public void setCreatedOn(Timestamp createdOn)
    {
    this.createdOn = createdOn;
    }

    /** @return the modifiedOn */
    public Timestamp getModifiedOn()
    {
    return modifiedOn;
    }

    /** @param modifiedOn
     *            the modifiedOn to set */
    public void setModifiedOn(Timestamp modifiedOn)
    {
    this.modifiedOn = modifiedOn;
    }

    /** @return the createdBy */
    public Long getCreatedBy()
    {
    return createdBy;
    }

    /** @param createdBy
     *            the createdBy to set */
    public void setCreatedBy(Long createdBy)
    {
    this.createdBy = createdBy;
    }

    /** @return the modifiedBy */
    public Long getModifiedBy()
    {
    return modifiedBy;
    }

    /** @param modifiedBy
     *            the modifiedBy to set */
    public void setModifiedBy(Long modifiedBy)
    {
    this.modifiedBy = modifiedBy;
    }

    /** @return the deleteFlag */
    public String getDeleteFlag()
    {
    return deleteFlag;
    }

    /** @param deleteFlag
     *            the deleteFlag to set */
    public void setDeleteFlag(String deleteFlag)
    {
    this.deleteFlag = deleteFlag;
    }

    /** @return the personContactNumber */
    public PersonContactNumber getPersonContactNumber()
    {
    return personContactNumber;
    }

    /** @param personContactNumber
     *            the personContactNumber to set */
    public void setPersonContactNumber(PersonContactNumber personContactNumber)
    {
    this.personContactNumber = personContactNumber;
    }

    /** <enter description here>
     * 
     * <li>pre-condition <enter text> <li>post-condition <enter text>
     * 
     * @return
     * 
     * @author Ishan
     * @createdOn Apr 19, 2014
     * @modifiedOn Apr 19, 2014 */
    @Override
    public String toString()
    {
    return "Person [id=" + id + ", code=" + code + ", initials=" + initials + ", firstName=" + firstName + ", middleName=" + middleName
        + ", lastName=" + lastName + ", gender=" + gender + ", dateOfBirth=" + dateOfBirth + ", nationality=" + nationality + ", createdOn="
        + createdOn + ", modifiedOn=" + modifiedOn + ", createdBy=" + createdBy + ", modifiedBy=" + modifiedBy + ", deleteFlag=" + deleteFlag
        + ", personContactNumber=" + personContactNumber + "]";
    }

}
    package com.mckenzie;

    import java.io.Serializable;
    import java.sql.Timestamp;

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.OneToOne;
    import javax.persistence.Table;

    import org.hibernate.annotations.GenericGenerator;
    import org.hibernate.annotations.Parameter;

    @Entity
    @Table(name = "person_contact_number")
    public class PersonContactNumber implements Serializable
    {
        private static final long serialVersionUID = 1L;

        @Id
        @GeneratedValue
        @Column(name = "ID")
        private Long id;

        @Column(name = "PERSON_ID", insertable = false, updatable = false)
        @GeneratedValue(generator = "gen")
        @GenericGenerator(name = "gen", strategy = "foreign", parameters = @Parameter(name = "property", value = "person"))
        private Long personId;

        @Column(name = "CONTACT_NUMBER")
        private String contactNumber;

        @Column(name = "CONTACT_TYPE")
        private String contactType;

        @Column(name = "CREATED_ON")
        private Timestamp createdOn;

        @Column(name = "MODIFIED_ON")
        private Timestamp modifiedOn;

        @Column(name = "CREATED_BY")
        private Long createdBy;

        @Column(name = "MODIFIED_BY")
        private Long modifiedBy;

        @Column(name = "DELETE_FLAG")
        private String deleteFlag;

        @OneToOne
        @JoinColumn(name = "PERSON_ID")
        private Person person;

        public PersonContactNumber()
        {
        super();
        }

        /** @return the id */
        public Long getId()
        {
        return id;
        }

        /** @param id
         *            the id to set */
        public void setId(Long id)
        {
        this.id = id;
        }

        /** @return the personId */
        public Long getPersonId()
        {
        return personId;
        }

        /** @param personId
         *            the personId to set */
        public void setPersonId(Long personId)
        {
        this.personId = personId;
        }

        /** @return the contactNumber */
        public String getContactNumber()
        {
        return contactNumber;
        }

        /** @param contactNumber
         *            the contactNumber to set */
        public void setContactNumber(String contactNumber)
        {
        this.contactNumber = contactNumber;
        }

        /** @return the contactType */
        public String getContactType()
        {
        return contactType;
        }

        /** @param contactType
         *            the contactType to set */
        public void setContactType(String contactType)
        {
        this.contactType = contactType;
        }

        /** @return the createdOn */
        public Timestamp getCreatedOn()
        {
        return createdOn;
        }

        /** @param createdOn
         *            the createdOn to set */
        public void setCreatedOn(Timestamp createdOn)
        {
        this.createdOn = createdOn;
        }

        /** @return the modifiedOn */
        public Timestamp getModifiedOn()
        {
        return modifiedOn;
        }

        /** @param modifiedOn
         *            the modifiedOn to set */
        public void setModifiedOn(Timestamp modifiedOn)
        {
        this.modifiedOn = modifiedOn;
        }

        /** @return the createdBy */
        public Long getCreatedBy()
        {
        return createdBy;
        }

        /** @param createdBy
         *            the createdBy to set */
        public void setCreatedBy(Long createdBy)
        {
        this.createdBy = createdBy;
        }

        /** @return the modifiedBy */
        public Long getModifiedBy()
        {
        return modifiedBy;
        }

        /** @param modifiedBy
         *            the modifiedBy to set */
        public void setModifiedBy(Long modifiedBy)
        {
        this.modifiedBy = modifiedBy;
        }

        /** @return the deleteFlag */
        public String getDeleteFlag()
        {
        return deleteFlag;
        }

        /** @param deleteFlag
         *            the deleteFlag to set */
        public void setDeleteFlag(String deleteFlag)
        {
        this.deleteFlag = deleteFlag;
        }

        /** @return the person */
        public Person getPerson()
        {
        return person;
        }

        /** @param person
         *            the person to set */
        public void setPerson(Person person)
        {
        this.person = person;
        }

        /** <enter description here>
         * 
         * <li>pre-condition <enter text> <li>post-condition <enter text>
         * 
         * @return
         * 
         * @author Ishan
         * @createdOn Apr 19, 2014
         * @modifiedOn Apr 19, 2014 */
        @Override
        public String toString()
        {
        return "PersonContactNumber [id=" + id + ", personId=" + personId + ", contactNumber=" + contactNumber + ", contactType=" + contactType
            + ", createdOn=" + createdOn + ", modifiedOn=" + modifiedOn + ", createdBy=" + createdBy + ", modifiedBy=" + modifiedBy
            + ", deleteFlag=" + deleteFlag + ", person=" + person + "]";
        }
    package com.mckenzie;

    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;
    import org.hibernate.service.ServiceRegistryBuilder;

    public class AppFactory
    {
        private static ServiceRegistry serviceRegistry;

        private static final SessionFactory sessionFactory;
        static
        {
        try
        {
            Configuration configuration = new Configuration();
            configuration.configure();
            serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        }
        catch (Throwable ex)
        {
            System.err.println("Failed to create sessionFactory object." + ex);
            throw new ExceptionInInitializerError(ex);
        }
        }

        public static SessionFactory getSessionFactory()
        {
        return sessionFactory;
        }
    }
package com.mckenzie;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

@SuppressWarnings("unused")
public class RunExample
{
    private static SessionFactory sessionFactory = null;

    @SuppressWarnings("unchecked")
    public static void main(String[] args)
    {
    SessionFactory sf;
    ServiceRegistry serviceRegistry;
    Session session = null;
    try
    {
        try
        {
        Configuration configuration = new Configuration();
        configuration.configure();
        serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
        sf = configuration.buildSessionFactory(serviceRegistry);
        }
        catch (Throwable ex)
        {
        System.err.println("Failed to create sessionFactory object." + ex);
        throw new ExceptionInInitializerError(ex);
        }
        System.out.println("Example : Hibernate One to One Mapping using Annotation ");
        session = sf.openSession();
        session.beginTransaction();

        PersonContactNumber personContactNumber = new PersonContactNumber();
        personContactNumber.setContactNumber("2121");
        personContactNumber.setContactType("home");
        personContactNumber.setDeleteFlag("F");

        Person person = new Person();
        person.setCode("abc");
        person.setInitials("Mr");
        person.setFirstName("Ishan");
        person.setMiddleName("T");
        person.setLastName("Seth");
        person.setGender("MALE");
        person.setNationality("Indian");
        person.setDeleteFlag("F");

        person.setPersonContactNumber(personContactNumber);

        session.save(person);

        List<Person> persons = session.createQuery("from person").list();
        for (int i = 0; i < persons.size(); i++)
        System.out.println(persons.get(i));

        session.getTransaction().commit();
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>Done");
    }
    catch (Exception e)
    {
        System.out.println(e.getMessage());
    }
    finally
    {
        session.close();
    }
    }
}
<?xml version='1.0' encoding='utf-8'?>
        <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://www.hibernate.org/dtd/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/mckenzie_db</property>
                <property name="hibernate.connection.username">root</property>
                <property name="hibernate.connection.password">root</property>
                <property name="hibernate.connection.pool_size">10</property>
                <property name="show_sql">true</property>
                <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
                <property name="hibernate.current_session_context_class">thread</property>

                <mapping class="com.mckenzie.Person" />
                <mapping class="com.mckenzie.PersonContactNumber" />
            </session-factory>
        </hibernate-configuration>
DEBUG 2014-04-19 21:56:36,282 [main] (SqlExceptionHelper.java:139) (logExceptions) - could not execute statement [n/a]
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'PERSON_ID' cannot be null
    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)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.Util.getInstance(Util.java:386)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1041)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4237)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2617)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2825)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2156)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2459)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2376)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2360)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:133)
    at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:96)
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:58)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2975)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3487)
    at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81)
    at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:377)
    at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:214)
    at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:194)
    at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:178)
    at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:321)
    at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:286)
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:206)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:191)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
    at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:735)
    at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:727)
    at org.hibernate.engine.spi.CascadingAction$5.cascade(CascadingAction.java:258)
    at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:388)
    at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:331)
    at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:209)
    at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:166)
    at org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:449)
    at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:292)
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:206)
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:191)
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:764)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:756)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:752)
    at com.mckenzie.RunExample.main(RunExample.java:57)
 WARN 2014-04-19 21:56:36,283 [main] (SqlExceptionHelper.java:145) (logExceptions) - SQL Error: 1048, SQLState: 23000
ERROR 2014-04-19 21:56:36,283 [main] (SqlExceptionHelper.java:147) (logExceptions) - Column 'PERSON_ID' cannot be null
could not execute statement
DEBUG 2014-04-19 21:56:36,285 [main] (LogicalConnectionImpl.java:232) (releaseConnection) - Releasing JDBC connection
DEBUG 2014-04-19 21:56:36,285 [main] (LogicalConnectionImpl.java:250) (releaseConnection) - Released JDBC connection