我使用的是Hibernate 3.6.8。这是我的表:
CREATE TABLE UTILIZATION (
ID BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY
...
FK_WORKCATEGORY SMALLINT,
CONSTRAINT PK_UTILIZATION PRIMARY KEY ( ID));
CREATE TABLE DB2ADMIN.WORKCATEGORY(
ID SMALLINT NOT NULL,
DESCRIPTION VARCHAR(50),
CONSTRAINT PK_WORKCATEGORY PRIMARY KEY(ID));
ALTER TABLE UTILIZATION ADD FOREIGN KEY (FK_WORKCATEGORY) REFERENCES WORKCATEGORY(ID);
我的Pojos:
@Entity
@Proxy(proxyClass=IWorkCategory.class)
@Table(name="WORKCATEGORY")
public class WorkCategory extends BoBase implements Serializable, IWorkCategory{
@Id
private Integer Id;
private String description;
@Override
public Serializable getId() {
return Id;
}
@Override
public void setId(Serializable id) {
Id = (Integer)id;
}
@Override
public String getDescription() {
return description;
}
@Override
public void setDescription(String description) {
this.description = description;
}
}
@Entity
@Proxy(proxyClass=IUtilization.class)
@Table(name="UTILIZATION")
public class Utilization extends BoBase implements Serializable, IUtilization{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long Id;
private WorkCategory workCategory;
@ManyToOne(fetch=FetchType.LAZY, targetEntity=WorkCategory.class)
@JoinColumn(name="FK_WORKCATEGORY", updatable=false, insertable=false)
public WorkCategory getWorkCategory() {
return workCategory;
}
public void setWorkCategory(WorkCategory workCategory) {
this.workCategory = workCategory;
}
}
正如您所看到的,表格使用外键WorkCategory
引用表FK_WORKCATEGORY
,但在Utilization
pojo中,我声明此属性的名称为workCategory
。
当我为Utilization bo = UtilizationDAO.get(new Long(123))
运行单元测试时,将使用列UTILIZATIO0 _。 WORKCATEGORY 生成SQL,而不是FK_WORKCATEGORY
。
我已将 @JoinColumn(name =“FK_WORKCATEGORY”,放在Utilization
Pojo中,但它没有帮助。
请帮我修复此错误。提前谢谢。
答案 0 :(得分:5)
那是因为你把你的注释放在了吸气剂而不是放在场上。由于@Id
注释放在一个字段上,Hibernate希望所有的注释都在字段上。