Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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 使用主键休眠一对一连接不起作用_Java_Hibernate_Join_One To One - Fatal编程技术网

Java 使用主键休眠一对一连接不起作用

Java 使用主键休眠一对一连接不起作用,java,hibernate,join,one-to-one,Java,Hibernate,Join,One To One,我在hibernate A和B中有两个实体。下面是相关代码 @Entity public class A { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") private Integer id; @OneToOne(mappedBy = "a", cascade = CascadeType.ALL) private B b; } @Entity

我在hibernate A和B中有两个实体。下面是相关代码

@Entity
public class A {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Integer id;

    @OneToOne(mappedBy = "a", cascade = CascadeType.ALL)
    private B b;
}

@Entity
public class B {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Integer id;

    @Column(name = "a_id")
    @GeneratedValue(generator = "gen")
    @GenericGenerator(name = "gen", strategy = "foreign", parameters = @Parameter(name = "property", value = "a"))
    private Integer aId;

    @OneToOne(fetch = FetchType.LAZY, optional = false)
    @PrimaryKeyJoinColumn
    private A a;
}
我做的和下面提到的链接中提到的一样

但是,当我执行以下hql查询时

"from A a left join a.b"
连接是在以下条件下进行的

a.id = b.id 
a.id = b.aId
虽然我想要的是以下条件

a.id = b.id 
a.id = b.aId

您已将A类引用给B类中的字段A

@OneToOne(fetch = FetchType.LAZY, optional = false)
@PrimaryKeyJoinColumn
private A a;
B类到A类中的B字段

@OneToOne(mappedBy="a", cascade=CascadeType.ALL)
    private B b;
因此,默认情况下,Hibernate使用引用字段创建联接查询。因此,hibernate在默认情况下对a.id=b.id执行连接。 但是我认为您可以创建自己的查询并使用本机查询来执行带有a.id=b.aId的join。

您必须使用@JoinColumnname=a\u id而不是@PrimaryKeyJoinColumn。 顺便说一下,不能在同一列上定义两个字段。但是,如果需要这样做,必须使其中一个不可插入且不可更新,如下所示:

@JoinColumn(name = "a_id", insertable = false, updatable = false)

请你把我的答复记为答复好吗?