JPA查询 - JOIN子句

时间:2012-01-06 10:55:53

标签: java sql oracle jpa hibernate-mapping

我有两张桌子 表A. 表B

表A 包含

X栏 Y栏 Z栏 W栏

表格B 包含

P栏 专栏Q. R栏 W栏

列W在两个表中都很常见。

及其实体

第一个实体

@Entity
@Table(name = "A")
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class TableA extends AbstractBaseEntity {

    @Id
    @NotNull
    @Column(name = "X")
    private Long sampleId1;

    @Id
    @NotNull
    @Column(name = "Y")
    private Long sampleId2;

    @Id
    @NotNull
    @Column(name = "Z")
    private Date sampleDate3;

    @ManyToOne(targetEntity = TableB.class)
    @JoinColumn(name = "W")
    private TableB tableB;

    ...
    getter
    setter
    ....
}

第二个实体

@Entity
@Table(name = "TableB")
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class TableB extends AbstractBaseEntity {

    @Id
    @NotNull
    @Column(name = "W")
    private Long sampleId4; 

    @Id
    @NotNull
    @Column(name = "P")
    private Long sampleId1;

    @Id
    @NotNull
    @Column(name = "Q")
    private Long sampleId2;

    @Id
    @NotNull
    @Column(name = "R")
    private Long sampleId3;

    ...
    getter
    setter
    ....
}

我有一个接口,所有的查询都写在

    Public interface sqlquery{

          String query1 = "from TableA ORDER BY" +
                sampleDate3 asc;";

          String query2= "from TableB";

}

现在我在这些查询中分别获取所有数据, 我需要一些帮助来编写一个新的单个查询,其中数据应该基于相同的ID显示,即SampleId4(W列) 使用JOIN子句和where。 并将数据存储在结果列表中。

1 个答案:

答案 0 :(得分:1)

你的映射没有多大意义。如果表B中的所有列都是ID的一部分,这可能意味着您可能在其中有几行,在W列中具有相同的值。因此,如果表A中的行具有此共享值,则它实际上引用了所有表B的这些行。因此,TableA和TableB之间没有ManyToOne关联。

关于你的查询,因为首先映射是错误的,我看不出我怎么写它。结束即使它没问题,你应该告诉我们查询应该返回什么,因为它远非明确。