Hibernate Аннотация, как использовать @Joincolumn для ссылки на внешний ключ? - PullRequest
1 голос
/ 04 декабря 2011

Я использую 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;
    }
}

Как вы видите, таблица Utilization ссылается на таблицу WorkCategory по внешнему ключу FK_WORKCATEGORY, но в Utilization pojo я объявляю это свойство с именем workCategory. Когда я запускаю модульный тест для Utilization bo = UtilizationDAO.get(new Long(123)), SQL генерируется со столбцом UTILIZATIO0 _. WORKCATEGORY вместо FK_WORKCATEGORY. Я вставил @ JoinColumn (name = "FK_WORKCATEGORY" в Utilization Pojo, но это не помогает. Пожалуйста, помогите мне исправить эту ошибку. Заранее спасибо.

1 Ответ

5 голосов
/ 04 декабря 2011

Это потому, что вы помещаете свою аннотацию в геттер, а не в поле. Поскольку аннотация @Id помещается в поле, Hibernate ожидает, что все аннотации будут в полях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...