我有两张桌子:
“TABLEA”
primaryKey是column1和column2
“tableB的”
primaryKey也是column1和column2,但附加了column4
-
问题是,“tableA”的primaryKey并不总是唯一的。然后有一个以上的结果。在这种情况下,我必须查看“tableB”。 primaryKeyB在tableB中区分“多于一个结果”。 如何使用扩展的primaryKey连接这两个表:如果findByPkTableA的结果多于一个结果,则使用findByPkTableB。或者是否可以在tableA中加载tableB的列?或者使用SecondaryTable?
构建数据库表:
代码
primaryKey A
@Embeddable
@Data
public class PkTableA implements Serializable{
/**
*
*/
private static final long serialVersionUID = -6732213911212534660L;
@Column(name="column_1")
private int column1;
@Column(name="column_2")
private int column2;
//Getter Setter
}
primaryKey B
@Embeddable
@Data
public class PkTableB implements Serializable{
/**
*
*/
private static final long serialVersionUID = -6732213911212534660L;
@Column(name="column_1")
private int column1;
@Column(name="column_2")
private int column2;
@Column(name="column_4")
private int column4;
//Getter Setter
}
表A
@Entity
@Data
@Table(name="tableA")
public class TableA {
@EmbeddedId
private PkTableA id;
@Column(name="column_3")
private int column3;
//Getter Setter
}
表B
@Entity
@Data
@Table(name="tableB")
public class TableB {
@EmbeddedId
private PkTableB id;
@Column(name="column_5")
private int column5;
//Getter Setter
}
答案 0 :(得分:0)
你有一些逻辑问题......
如果声明primary key (column1, column2)
,则不能有重复值,因为数据库不允许插入。
create table tableA
( column1 int not null,
column2 int not null,
column3 int not null,
primary key (column1, column2));
insert into tableA values
(1,1,1),
(2,2,2),
(1,2,1);
我们在数据库中有以下行:
col1 col2 col3 1 1 1 2 2 2 1 2 1
如果我们尝试插入以下行:
insert into tableA values (1,1,5);
我们将遇到重复错误
#1062 - Duplicate entry '1-1' for key 'PRIMARY'
修改强>
加入两个表的唯一方法是
SELECT tableA.*, tableB.*
FROM
tableA JOIN tableB
ON tableA.column1 = tableB.column1 AND
tableA.column2 = tableB.column2
答案 1 :(得分:0)
如果您的主键包含多列不同的表...您可以尝试以下操作...
为tableB生成一个唯一的id并将其加入tableA ..
创建一个新实体,其中包括tableA的所有主键列和tableB
的连接列 public class PrimaryKeyEntity
{
private string column1;
private string column2;
private pkTabelB joincolumnfromB;
}
然后在你的tableA实体中将它包含为idclass ...
@IdClass(PrimaryKeyEntity.class)
@Entity
@Table(name="tableA")
public class TableA {.....
@Embedded
PkTableB pkTableB