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方法省略
}