Hibernate運行報錯!
package?mtm_bfk; import?java.util.Date; import?java.util.Set; import?javax.persistence.Entity; import?javax.persistence.GeneratedValue; import?javax.persistence.Id; import?javax.persistence.JoinColumn; import?javax.persistence.JoinTable; import?javax.persistence.ManyToMany; /*建實體類*/ /*學生實體類*/ @Entity public?class?Students?{//多方 private?int?sid;//學號 private?String?sname;//姓名 private?String?gender;//性別 private?Date?birthday;//出生日期 private?String?major;//專業(yè) private?Set<Teachers>?teacher;//學生持有教師的集合 public?Students()?{//公有的默認的不帶參數的構造方法 super(); } public?Students(String?sname,?String?gender,?Date?birthday, String?major)?{//帶參數的構造方法 super(); this.sname=sname; this.gender?=?gender; this.birthday?=?birthday; this.major?=?major; } //私有屬性進行封裝 @Id @GeneratedValue public?int?getSid()?{ return?sid; } public?void?setSid(int?sid)?{ this.sid?=?sid; } public?String?getSname()?{ return?sname; } public?void?setSname(String?sname)?{ this.sname?=?sname; } 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; } @ManyToMany @JoinTable( name="teachers_students",//中間表的名字 joinColumns={@JoinColumn(name="sid")},//反轉控制字段的名字 inverseJoinColumns={@JoinColumn(name="tid")}//本身的外鍵關聯(lián)關系的字段名稱 ) public?Set<Teachers>?getTeacher()?{ return?teacher; } public?void?setTeacher(Set<Teachers>?teacher)?{ this.teacher?=?teacher; } }
教師類;
package?mtm_bfk; import?java.util.Set; import?javax.persistence.Column; import?javax.persistence.Entity; import?javax.persistence.GeneratedValue; import?javax.persistence.Id; import?javax.persistence.ManyToMany; import?org.hibernate.annotations.GenericGenerator; /*教師實體類*/ //被映射成一張表 @Entity//實體類、類注解 public?class?Teachers?{ @Id//指定主鍵屬性 @GeneratedValue(generator="tid")//指定主鍵生成器、生成器的名字 @GenericGenerator(name="tid",strategy="assigned")//對應的@GenericGenerator、名字、生成策略(手工賦值) @Column(length=4)//指定字段長度的大小 private?String?tid;//教師的編號 private?String?tname;//教師的姓名 @ManyToMany(mappedBy="teachers") private?Set<Students>?stus;//教師持有學生的集合 public?Teachers()?{//不帶參數的公有的構造方法 super(); } public?Teachers(String?tid,?String?tname)?{//帶參數的構造方法 super(); this.tid?=?tid; this.tname?=?tname; } //字段封裝 public?String?getTid()?{ return?tid; } public?void?setTid(String?tid)?{ this.tid?=?tid; } public?String?getTname()?{ return?tname; } public?void?setTname(String?tname)?{ this.tname?=?tname; } }
控制臺:
五月?20,?2016?8:39:21?下午?org.hibernate.annotations.common.Version?<clinit> INFO:?HCANN000001:?Hibernate?Commons?Annotations?{4.0.2.Final} 五月?20,?2016?8:39:21?下午?org.hibernate.Version?logVersion INFO:?HHH000412:?Hibernate?Core?{4.2.21.Final} 五月?20,?2016?8:39:21?下午?org.hibernate.cfg.Environment?<clinit> INFO:?HHH000206:?hibernate.properties?not?found 五月?20,?2016?8:39:21?下午?org.hibernate.cfg.Environment?buildBytecodeProvider INFO:?HHH000021:?Bytecode?provider?name?:?javassist 五月?20,?2016?8:39:21?下午?org.hibernate.cfg.Configuration?configure INFO:?HHH000043:?Configuring?from?resource:?/hibernate.cfg.xml 五月?20,?2016?8:39:21?下午?org.hibernate.cfg.Configuration?getConfigurationInputStream INFO:?HHH000040:?Configuration?resource:?/hibernate.cfg.xml 五月?20,?2016?8:39:21?下午?org.hibernate.cfg.Configuration?doConfigure INFO:?HHH000041:?Configured?SessionFactory:?null 五月?20,?2016?8:39:21?下午?org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl?configure WARN:?HHH000402:?Using?Hibernate?built-in?connection?pool?(not?for?production?use!) 五月?20,?2016?8:39:21?下午?org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl?configure INFO:?HHH000115:?Hibernate?connection?pool?size:?20 五月?20,?2016?8:39:21?下午?org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl?configure INFO:?HHH000006:?Autocommit?mode:?false 五月?20,?2016?8:39:21?下午?org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl?configure INFO:?HHH000401:?using?driver?[com.mysql.jdbc.Driver]?at?URL?[jdbc:mysql://localhost:3306/imooc_hibernate3?useUnicode=true&characterEncoding=utf8] 五月?20,?2016?8:39:21?下午?org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl?configure INFO:?HHH000046:?Connection?properties:?{user=root,?password=****} 五月?20,?2016?8:39:21?下午?org.hibernate.dialect.Dialect?<init> INFO:?HHH000400:?Using?dialect:?org.hibernate.dialect.MySQLDialect
2016-12-01
你用junit測試的結果,吧控制臺輸出來的干嘛。。。真的醉了。錯誤很簡單啊,你在學生類的集合名稱是teacher,你在教師類主控方的集合名稱寫的是teachers,前后不搭,hibernate不知道你這個鎖定的teachers是什么,當然就報錯咯。下次用Junit報錯的話,看junti報錯的是什么,控制臺這里沒什么錯誤的。
總結的說,你的錯誤是@ManyToMany(mappedBy="teachers")設置主控方寫的是teachers,但是在學生類的集合里private?Set<Teachers>?teacher;寫的teacher,主控方不匹配造成的錯誤。
2016-05-22
之前的一對一、一對多都沒問題
2016-05-22
Configured?SessionFactory:?null
這個是不是沒創(chuàng)建會話工廠
Autocommit?mode:?false
這個是不是自動提交