我正在尝试在以hbm.xml文件为标准的项目中使用休眠注释。但是我发现,在同一项目中尝试同时使用hbm和注释约定时,存在一些主要限制。现在的问题是,当尝试与另一个类联接时,是否可以为带有注释的类指定实体名称?
分解出的问题是,当hibernate创建上下文时,在hbm文件中指定的实体名称类似于“ Person”,但是当将注释类引入上下文时,它试图查找尝试解析依赖类时出现“ com.this.is.classpath.Person”。有没有一种方法可以指示我查找自定义实体名称而不是类路径?
我已经尝试将hbm文件中Person的实体名称更改为classpath,但这在整个项目中引起了许多问题。
注释实体:
@Entity
@Table(name = "Group")
public class Group implements Serializable {
@Id
@GeneratedValue
@Column(insertable = false)
private Long id;
@IgnoreSizeOf
@ManyToOne
@JoinColumn(name = "createdBy",referencedColumnName = "PersonId")
private Person createdBy;
}
Person类的旧hbm映射:
<hibernate-mapping package="com.this.is.classpath" default-cascade="save-update,persist,merge,lock,replicate,evict,refresh" default-access="field">
<class name="Person" entity-name="Person" table="Person" dynamic-update="true" optimistic-lock="none" lazy="true" discriminator-value="1">
在构造休眠上下文时,将产生此输出。
Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.this.is.classpath.Group.createdBy references an unknown entity: com.this.is.classpath.Person
我调试了休眠代码,发现它正在尝试使用Person的类路径作为上下文中的实体名称,而不是hbm文件中描述的“ Person”实体名称。