1.Could not locate cfg.xml resource [hibernate.cfg.xml]
做了一個hibernate緩存的測試,使用運行測試用例的時候,報錯找不到cfg.xml配置文件(如hibernate.cfg.xml),是因爲該配置文件應該要放在默認src/main/resources資源目錄下,或者指定的資源目錄下,否則掃描不到該配置文件。
簡單建了兩個實體,寫了一個配置文件hibernate.cfg.xml,該配置文件應該要放在src/main/resources資源目錄下。
2. org.hibernate.MappingException: Could not determine type for:
Exception in thread "main" org.hibernate.MappingException: Could not determine type for: com.insanebeans.hibernate.entity.User, at table: BEAN_TICKET, for columns: [org.hibernate.mapping.Column(user)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:455)
at org.hibernate.mapping.Column.getSqlTypeCode(Column.java:191)
at org.hibernate.mapping.Column.getSqlType(Column.java:231)
at org.hibernate.tool.schema.internal.StandardTableExporter.getSqlCreateStrings(StandardTableExporter.java:96)
at org.hibernate.tool.schema.internal.StandardTableExporter.getSqlCreateStrings(StandardTableExporter.java:30)
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:316)
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:166)
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:135)
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:121)
at org.hibernate.tool.hbm2ddl.SchemaExport.doExecution(SchemaExport.java:298)
at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:249)
at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:228)
at com.insanebeans.test.TestAutoCreateTable.createDataBase(TestAutoCreateTable.java:51)
at com.insanebeans.test.TestAutoCreateTable.main(TestAutoCreateTable.java:76)
這是我在配置Hibernate自動在數據庫中創建表的配置後,報錯。先看實體類:
User實體:
@Entity
@Table(name = "BEAN_USER")
public class User {
...
@JoinColumn(name = "TICKET_ID")
private List<Ticket> tickets;
}
Ticket實體:
@Entity
@Table(name="BEAN_TICKET")
public class Ticket {
...
@JoinColumn(name = "USER_ID")
private User user;
//getter和setter方法省略
}
在創建BEAN_TICKET表的時候,映射到屬性user時,找不到User的類型,需要指定,解決辦法:
@JoinColumn(name = "TICKET_ID")
@ManyToOne(targetEntity = Ticket.class)
private List<Ticket> tickets;
同樣,在Ticket中:
@JoinColumn(name = "USER_ID")
@ManyToOne(targetEntity=User.class)
private User user;
完整的實體類:
@Entity
@Table(name="BEAN_TICKET")
public class Ticket {
@Id
private Long id;
private String type;
@JoinColumn(name = "USER_ID")
@ManyToOne(targetEntity=User.class)
private User user;
//getter和setter方法省略
}
@Entity
@Table(name = "BEAN_USER")
public class User {
@Id
private Long id;
private String name;
private String address;
@JoinColumn(name = "TICKET_ID")
@ManyToOne(targetEntity = Ticket.class)
private List<Ticket> tickets;
//getter和setter方法省略
}