我有现有的表附加和地址与此示例数据
表附加组件
------------------------------------------
id | extras_key | extras_value
------------------------------------------
1 | name | John
2 | address_id | addr-2
------------------------------------------表地址
--------------------------------------------
addr_id | name | city
--------------------------------------------
addr-2 | Office | Jakarta
--------------------------------------------如何在JPA上连接这些表?我的代码是
@Entity
@Getter
@Setter
@NoArgsConstructor
@ToString
@Table(name="address")
public class Address implements Serializable {
@Id
@Column(name="addr_id")
private String addrId;
@Column(name="name")
private String name;
@Column(name="city")
private String city;
}和
@Entity
@Getter
@Setter
@NoArgsConstructor
@ToString
@Table(name="extras")
public class Extras implements Serializable {
@Id
@Column(name="id")
private int id;
@Column(name="extras_key")
private String extrasKey;
@Column(name="extras_value")
private String extrasValue;
@OneToOne(optional = false)
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "extras_value", referencedColumnName = "addr_id", insertable = false, updatable = false)
private Address address;
}但是,当我测试这些代码时,它的结果是假的(即使地址为空也会显示所有结果),并且在production DB (有很多数据)上花费了大量的执行时间,这是示例结果
Extras{id=1, extrasKey='name', extrasValue='John', address=null}
Extras{id=2, extrasKey='address_id', extrasValue='addr-2', address=Address{addrId='addr-2', name='Office', city='Jakarta'}}我尝试了这个查询,它显示了正确的结果(只显示一行地址)
SELECT * FROM extras JOIN address ON extras.extras_value = address.addr_id发布于 2020-11-11 13:20:10
您可以在存储库中添加查询:
@Repository
public interface ExtrasRepository extends CrudRepository<Extras, Integer> {
@Query(value = "select extras.* from extras " +
"inner join address on extras.extras_value = address.addr_id",nativeQuery = true)
List<Extras> functionName();
}https://stackoverflow.com/questions/64780279
复制相似问题