一、一对一单向外键关联:
一对一单向外键关联主要用到了以下两个注解:
1、OneToOne(cascade=CasecadeTYPE.ALL);
cascade=CasecadeTYPE.ALL:表示的是表之间的级联关系,比如级联删除,级联更新等,ALL表示的是全级联。
2、JoinColumn(name="sid" unique=true);
JoinColumn: 表示将被控类的外键写在主控类中
主要是用到主表中。
需要注意的点是: 在保存时应该先保存外键对象再保存主表对象;
问题一: 在编写实体类Students.java的时候发生一个错误:
Type mismatch: cannot convert from CascadeType to CascadeType[]
检查之后发现错误是导致的原因是注解注解引用的包出现了问题:
@OneToOne(cascade=CascadeType.ALL)//表示全 级联关系
@Column(name="pid" unique=true)
导致错误的包:
import org.hibernate.annotations.GenericGenerator; import org.hibernate.metamodel.binding.CascadeType;
正确的包:
import javax.persistence.OneToOne;
问题一: 在一切都准备好了,要生成表结构的同时出现了第二个问题:问题的描述是这样的:
2016-4-17 10:38:46 org.hibernate.annotations.common.Version <clinit> INFO: HCANN000001: Hibernate Commons Annotations {4.0.2.Final} 2016-4-17 10:38:46 org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {4.2.21.Final} 2016-4-17 10:38:46 org.hibernate.cfg.Environment <clinit> INFO: HHH000206: hibernate.properties not found 2016-4-17 10:38:46 org.hibernate.cfg.Environment buildBytecodeProvider INFO: HHH000021: Bytecode provider name : javassist 2016-4-17 10:38:46 org.hibernate.cfg.Configuration configure INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml 2016-4-17 10:38:46 org.hibernate.cfg.Configuration getConfigurationInputStream INFO: HHH000040: Configuration resource: /hibernate.cfg.xml 2016-4-17 10:38:46 org.hibernate.cfg.Configuration doConfigure INFO: HHH000041: Configured SessionFactory: null 2016-4-17 10:38:46 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!) 2016-4-17 10:38:46 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Hibernate connection pool size: 20 2016-4-17 10:38:46 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000006: Autocommit mode: false 2016-4-17 10:38:46 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=UTF-8] 2016-4-17 10:38:46 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000046: Connection properties: {user=root, password=****} 2016-4-17 10:38:47 org.hibernate.dialect.Dialect <init> INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 2016-4-17 10:38:47 org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreation INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
最主要的是这一句:
INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
貌似是我的jdbc的版本太低,所以导致测试没有通过。但是这不是导致错误的主要原因,版本低一般不会导致问题出现,
有一篇博客有同样的问题但是还是执行成功了:http://blog.csdn.net/xwin1989/article/details/7380736
最主要的原因是如下的报错信息:
org.hibernate.AnnotationException: @Column(s) not allowed on a @OneToOne property: oto_fk.Students.card
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1745)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:895)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:728)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3625)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3579)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1381)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1786)
at oto_fk.TestStudents.testShemaExport(TestStudents.java:24)
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:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
我的Students.java实体类的类容是这样的:
package oto_fk; import java.io.Serializable; import java.util.Date; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Embedded; import javax.persistence.EmbeddedId; import javax.persistence.Entity; /*JPA注解*/ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.Transient; /** * 学生实体类 * @author Administrator * */ //@Entity(name="t_students") @Entity//表示这是一个实体类 //schema:表示数据库的名称 //name:表示数据库的表名 //Embedddable注解表示一个非Entity类,但是可以嵌入到另外一个实体类中作为属性而存在 public class Students implements Serializable{ private IdCard card; private int sid; //将学号改成字符串类型 private String gender; //性别 private Date birthday;//出生日期 private String major;//专业 public Students(IdCard card,int sid, String gender, Date birthday, String major) { super(); this.card = card; this.sid = sid; this.gender = gender; this.birthday = birthday; this.major = major; } @OneToOne(cascade=CascadeType.ALL)//表示全 级联关系 @Column(name="pid", unique=true) public IdCard getCard() { return card; } public void setCard(IdCard card) { this.card = card; } @Id @GeneratedValue//主键自增 public int getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getMajor() { return major; } public void setMajor(String major) { this.major = major; } public Students() { } }
导致错误的原因是:
@OneToOne(cascade=CascadeType.ALL)//表示全 级联关系 @Column(name="pid", unique=true) public IdCard getCard() { return card; }
应该改成:
@OneToOne(cascade=CascadeType.ALL)//表示全 级联关系 @JoinColumn(name="pid", unique=true) public IdCard getCard() { return card; }
以下将正确执行的代码贴出:
1、 students.java实体类(主控类):
package oto_fk; import java.io.Serializable; import java.util.Date; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Embedded; import javax.persistence.EmbeddedId; import javax.persistence.Entity; /*JPA注解*/ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.Transient; /** * 学生实体类 * @author Administrator * */ //@Entity(name="t_students") @Entity//表示这是一个实体类 //schema:表示数据库的名称 //name:表示数据库的表名 //Embedddable注解表示一个非Entity类,但是可以嵌入到另外一个实体类中作为属性而存在 public class Students implements Serializable{ private IdCard card; private int sid; //将学号改成字符串类型 private String gender; //性别 private Date birthday;//出生日期 private String major;//专业 public Students(IdCard card,int sid, String gender, Date birthday, String major) { super(); this.card = card; this.sid = sid; this.gender = gender; this.birthday = birthday; this.major = major; } @OneToOne(cascade=CascadeType.ALL)//表示全 级联关系 @JoinColumn(name="pid", unique=true) public IdCard getCard() { return card; } public void setCard(IdCard card) { this.card = card; } @Id @GeneratedValue//主键自增 public int getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getMajor() { return major; } public void setMajor(String major) { this.major = major; } public Students() { } }
2、IdCard实体类(被控类):
package oto_fk; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import org.hibernate.annotations.GenericGenerator; /*身份证类*/ @Entity public class IdCard { private String pid;//身份证号 private String sname;//学生姓名 //无参数的构造器 public IdCard() { } //带参数的构造器 public IdCard(String pid, String sname) { super(); this.pid = pid; this.sname = sname; } @Id//指定主键 @Column(length=18)//指定身份证的长度 //主键生成策略 @GenericGenerator(name="pid",strategy="assigned") @GeneratedValue(generator="pid") public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } }
3、Hibernate.cfg.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <!-- old: http://hibernate.sourceforge.net/hibernate-configuration-3.6.dtd --> <!-- new: http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd --> <!-- : http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd --> <hibernate-configuration> <session-factory> <!-- 显示sql语句 --> <property name="show_sql">true</property> <property name="myeclipse.connection.profile">bookshop</property> <!-- <property name="connection.url"> jdbc:mysql://localhost:3306/bookshop jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8 </property> --> <property name="connection.url">jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=UTF-8</property> <property name="connection.username">root</property> <property name="connection.password">woaiwojia..123</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="format_sql">true</property> <property name="hbm2ddl.auto">update</property> <property name="hibernate.current_session_context_class">thread</property> <!-- 将实体类映射到数据库 --> <mapping class="oto_fk.Students"/> <mapping class="oto_fk.IdCard"/> </session-factory> </hibernate-configuration>
4、测试用例:
1 package oto_fk; 2 3 import org.hibernate.SessionFactory; 4 import org.hibernate.cfg.Configuration; 5 import org.hibernate.service.ServiceRegistry; 6 import org.hibernate.service.ServiceRegistryBuilder; 7 import org.hibernate.tool.hbm2ddl.SchemaExport; 8 import org.junit.Test; 9 10 public class TestStudents { 11 12 @Test 13 public void testShemaExport(){ 14 //创建Hibernate配置对象 15 Configuration configuration = new Configuration().configure(); 16 17 //创建服务注册对象 18 ServiceRegistry serviceRegistry = 19 new ServiceRegistryBuilder() 20 .applySettings(configuration.getProperties()) 21 .buildServiceRegistry(); 22 23 //创建sessionFactory 24 SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); 25 26 //生成SchemaExport对象 27 SchemaExport export = new SchemaExport(configuration); 28 //调用schemaExport的create生成数据库表结构 29 export.create(true, true); 30 } 31 }
5、数据库表生成log:
2016-4-17 10:53:56 org.hibernate.annotations.common.Version <clinit> INFO: HCANN000001: Hibernate Commons Annotations {4.0.2.Final} 2016-4-17 10:53:56 org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {4.2.21.Final} 2016-4-17 10:53:56 org.hibernate.cfg.Environment <clinit> INFO: HHH000206: hibernate.properties not found 2016-4-17 10:53:56 org.hibernate.cfg.Environment buildBytecodeProvider INFO: HHH000021: Bytecode provider name : javassist 2016-4-17 10:53:56 org.hibernate.cfg.Configuration configure INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml 2016-4-17 10:53:56 org.hibernate.cfg.Configuration getConfigurationInputStream INFO: HHH000040: Configuration resource: /hibernate.cfg.xml 2016-4-17 10:53:56 org.hibernate.cfg.Configuration doConfigure INFO: HHH000041: Configured SessionFactory: null 2016-4-17 10:53:56 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!) 2016-4-17 10:53:56 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Hibernate connection pool size: 20 2016-4-17 10:53:56 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000006: Autocommit mode: false 2016-4-17 10:53:56 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=UTF-8] 2016-4-17 10:53:56 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000046: Connection properties: {user=root, password=****} 2016-4-17 10:53:56 org.hibernate.dialect.Dialect <init> INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 2016-4-17 10:53:56 org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreation INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4 2016-4-17 10:53:57 org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService INFO: HHH000399: Using default transaction strategy (direct JDBC transactions) 2016-4-17 10:53:57 org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init> INFO: HHH000397: Using ASTQueryTranslatorFactory 2016-4-17 10:53:57 org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000228: Running hbm2ddl schema update 2016-4-17 10:53:57 org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000102: Fetching database metadata 2016-4-17 10:53:57 org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000396: Updating schema 2016-4-17 10:53:57 org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata INFO: HHH000262: Table not found: IdCard 2016-4-17 10:53:57 org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata INFO: HHH000262: Table not found: Students 2016-4-17 10:53:57 org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata INFO: HHH000262: Table not found: IdCard 2016-4-17 10:53:57 org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata INFO: HHH000262: Table not found: Students 2016-4-17 10:53:57 org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata INFO: HHH000262: Table not found: IdCard 2016-4-17 10:53:57 org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata INFO: HHH000262: Table not found: Students 2016-4-17 10:53:57 org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000232: Schema update complete 2016-4-17 10:53:57 org.hibernate.dialect.Dialect <init> INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 2016-4-17 10:53:57 org.hibernate.tool.hbm2ddl.SchemaExport execute INFO: HHH000227: Running hbm2ddl schema export 2016-4-17 10:53:57 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!) 2016-4-17 10:53:57 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Hibernate connection pool size: 20 2016-4-17 10:53:57 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000006: Autocommit mode: false 2016-4-17 10:53:57 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=UTF-8] 2016-4-17 10:53:57 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000046: Connection properties: {user=root, password=****} alter table Students drop foreign key FK_mryi31xkbwbosevquurf60ivb drop table if exists IdCard drop table if exists Students create table IdCard ( pid varchar(18) not null, sname varchar(255), primary key (pid) ) create table Students ( sid integer not null auto_increment, birthday datetime, gender varchar(255), major varchar(255), pid varchar(18), primary key (sid) ) alter table Students add constraint UK_mryi31xkbwbosevquurf60ivb unique (pid) alter table Students add index FK_mryi31xkbwbosevquurf60ivb (pid), add constraint FK_mryi31xkbwbosevquurf60ivb foreign key (pid) references IdCard (pid) 2016-4-17 10:53:57 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop INFO: HHH000030: Cleaning up connection pool [jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=UTF-8] 2016-4-17 10:53:57 org.hibernate.tool.hbm2ddl.SchemaExport execute INFO: HHH000230: Schema export complete
6、数据库表生成情况:
7、编写一个测试用例来测试一对一单向外键关联的效果:
@Test public void addStudents() { //创建Hibernate配置对象 Configuration configuration = new Configuration().configure(); //创建服务注册对象 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder() .applySettings(configuration.getProperties()) .buildServiceRegistry(); //创建sessionFactory SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); //创建会话对象 Session session = sessionFactory.getCurrentSession(); //开启事务 Transaction tx = session.beginTransaction(); //生成一个学生身份证对象 IdCard card = new IdCard("888888888888888888","刘德华"); //生成一个学生对象 Students stu = new Students(card,"男",new Date(),"计算机"); //先保存被控表对象(身份证) session.save(card); session.save(stu); //提交事务 tx.commit();
Log:
2016-4-17 11:19:45 org.hibernate.annotations.common.Version <clinit> INFO: HCANN000001: Hibernate Commons Annotations {4.0.2.Final} 2016-4-17 11:19:45 org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {4.2.21.Final} 2016-4-17 11:19:45 org.hibernate.cfg.Environment <clinit> INFO: HHH000206: hibernate.properties not found 2016-4-17 11:19:45 org.hibernate.cfg.Environment buildBytecodeProvider INFO: HHH000021: Bytecode provider name : javassist 2016-4-17 11:19:45 org.hibernate.cfg.Configuration configure INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml 2016-4-17 11:19:45 org.hibernate.cfg.Configuration getConfigurationInputStream INFO: HHH000040: Configuration resource: /hibernate.cfg.xml 2016-4-17 11:19:45 org.hibernate.cfg.Configuration doConfigure INFO: HHH000041: Configured SessionFactory: null 2016-4-17 11:19:45 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!) 2016-4-17 11:19:45 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Hibernate connection pool size: 20 2016-4-17 11:19:45 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000006: Autocommit mode: false 2016-4-17 11:19:45 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=UTF-8] 2016-4-17 11:19:45 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000046: Connection properties: {user=root, password=****} 2016-4-17 11:19:46 org.hibernate.dialect.Dialect <init> INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 2016-4-17 11:19:46 org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreation INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4 2016-4-17 11:19:46 org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService INFO: HHH000399: Using default transaction strategy (direct JDBC transactions) 2016-4-17 11:19:46 org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init> INFO: HHH000397: Using ASTQueryTranslatorFactory 2016-4-17 11:19:47 org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000228: Running hbm2ddl schema update 2016-4-17 11:19:47 org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000102: Fetching database metadata 2016-4-17 11:19:47 org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000396: Updating schema 2016-4-17 11:19:47 org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000261: Table found: hibernate.idcard 2016-4-17 11:19:47 org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000037: Columns: [pid, sname] 2016-4-17 11:19:47 org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000108: Foreign keys: [] 2016-4-17 11:19:47 org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000126: Indexes: [primary] 2016-4-17 11:19:47 org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000261: Table found: hibernate.students 2016-4-17 11:19:47 org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000037: Columns: [birthday, sid, gender, pid, major] 2016-4-17 11:19:47 org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000108: Foreign keys: [fk_mryi31xkbwbosevquurf60ivb] 2016-4-17 11:19:47 org.hibernate.tool.hbm2ddl.TableMetadata <init> INFO: HHH000126: Indexes: [primary, fk_mryi31xkbwbosevquurf60ivb, uk_mryi31xkbwbosevquurf60ivb] 2016-4-17 11:19:47 org.hibernate.tool.hbm2ddl.SchemaUpdate execute INFO: HHH000232: Schema update complete Hibernate: insert into IdCard (sname, pid) values (?, ?) Hibernate: insert into Students (birthday, pid, gender, major) values (?, ?, ?, ?)
数据库数据插入情况:
IdCard表
Students表:
一对一的单向外键关联到此结束,转载的同仁注明出处。谢谢!