我有两张桌子 表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。 并将数据存储在结果列表中。
答案 0 :(得分:1)
你的映射没有多大意义。如果表B中的所有列都是ID的一部分,这可能意味着您可能在其中有几行,在W列中具有相同的值。因此,如果表A中的行具有此共享值,则它实际上引用了所有表B的这些行。因此,TableA和TableB之间没有ManyToOne关联。
关于你的查询,因为首先映射是错误的,我看不出我怎么写它。结束即使它没问题,你应该告诉我们查询应该返回什么,因为它远非明确。