Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在@JoinColumn上进行连接,该列为@Id_Java_Hibernate_Join_Hibernate Criteria - Fatal编程技术网

Java 无法在@JoinColumn上进行连接,该列为@Id

Java 无法在@JoinColumn上进行连接,该列为@Id,java,hibernate,join,hibernate-criteria,Java,Hibernate,Join,Hibernate Criteria,我有一个@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; @

我有一个@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;

    .....
}
Criteria criteria = sessionFactory.getCurrentSession()
        .createCriteria(AnyNews.class, "any")
        .createCriteria("news", "news");
        .add(Restrictions.eq("news.id", id))
        .add(Restrictions.ge("news.date", from.getTime()));
我想在
News
实体的
date
列中添加
标准的
限制。所以我制定了如下标准:

@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;

    .....
}
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注释吗?

您需要一个
@OneToOne(fetch=FetchType.EAGER)
注释才能进行连接

或者,可以执行
.setFetchMode(“news”,FetchMode.JOIN)