将一个表的连接列与另一个表的一列合并到java对象中

f5emj3cl  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(401)

我想在一个实体(对象)中合并不同表的列,但我得到的列为null,即使它不是null。我有两个实体叫做 Operation 以及 CanceledOperation :
操作:

@Entity
@Table(name = "OPERATIONS")
public class Operation{

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", unique = true, nullable = false)
private Long id;

@Column(name = "Date")
private Timestamp date;

@Transient
private String message;

// Other attributes and getters & setters
}

取消操作:

@Entity
@Table(name = "CANCELED_OPERATIONS")
public class CanceledOperation{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Long id;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "OPERATION_ID", nullable = false)
    private Operation operation;

    @Column(name = "RAINSON")
    private String raison;
//getters & setters
}

我想加入 operation 以及 canceledIperation 以显示取消操作的原因和null non canceled。
这是我的存储库中的本机查询:

@query(value = "SELECT op.* , co.raison as raison FROM operations op LEFT JOIN canceled_operations co ON op.ID  = co.OPERATION_ID", countQuery = "SELECT count(*) FROM operations op LEFT JOIN canceled_operations co ON op.ID  = co.OPERATION_ID")
    Page<Operation> getAllOperations(Pageable pageable);

我这样称呼我的存储库:

final Page<Operation> operations= operationRepository.getAllOperations(pageable);

我尝试了许多解决方法,即使用 Object[] 而不是 Operation 我还在 operation 具有的实体 @transient 注解,但即使我仍然得到的理由是空的。你能给我一个提示来解决这个问题吗。提前谢谢。

r8xiu3jd

r8xiu3jd1#

在canceledoperation实体中,是否可以指定referencedcolumnname=“id”并重试?

@OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "OPERATION_ID",referencedColumnName = "ID", nullable = false)
    private Operation operation;
wj8zmpe1

wj8zmpe12#

我找到了一个简单的方法,我用 findAll() 然后我会影响 raison 属性来自 CanceledOperationmessage 的属性 Operation 使用 stream 以及 map 这两个用户从存储库收到了列表。

相关问题