Невозможно присоединиться к @JoinColumn, который является @Id - PullRequest
1 голос
/ 20 марта 2012

У меня есть класс @Entity, который имеет несколько столбцов ID, и все они являются внешними ключами. Код класса выглядит следующим образом:

@Entity
@Immutable
@Table(name = "AnyNews")
public class AnyNews implements Serializable {
    private static final long serialVersionUID = 43876852L;

    @Id
    @Column(name = "id")
    private int id;

    @Id
    @OneToOne
    @JoinColumn(name = "news_id")
    private News news;

    .....
}

Я хочу добавить Restriction в Criteria с News столбцом date. Итак, я сделал такие критерии:

Criteria criteria = sessionFactory.getCurrentSession()
        .createCriteria(AnyNews.class, "any")
        .createCriteria("news", "news");
        .add(Restrictions.eq("news.id", id))
        .add(Restrictions.ge("news.date", from.getTime()));

Код выглядит хорошо, но выдает ошибку вроде:

org.hibernate.exception.SQLGrammarException: could not execute query
...

Проблема была вызвана отсутствием оператора Join. В запросе не было оператора Join:

select
    this_.id as news4_5_0_,
    this_.news_id as keyword1_5_0_,
    this_.board_no as board2_5_0_,
    this_.seq as seq5_0_ 
from
    AnyNews this_ 
where
    this_.news_id=? 
    and news1_.date>=? 

Почему Hibernate делает такой запрос. Разве я не могу использовать аннотации @Id и @JoinColumn в одном столбце?

1 Ответ

0 голосов
/ 20 марта 2012

Чтобы присоединиться, вам нужна аннотация @OneToOne(fetch=FetchType.EAGER).

Или, может быть, сделать .setFetchMode("news", FetchMode.JOIN)

...