【发布时间】:2021-03-28 16:06:02
【问题描述】:
我想将不同表的列合并到一个实体(对象)中,但我得到一列 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 未取消操作的原因。
这是我的存储库中的本机查询:
@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 实体中添加了一个名为raison 的属性,带有@transient 注释,但即使这样我仍然得到理由是空的。
你能给我一个提示来解决这个问题吗?
提前致谢。
【问题讨论】:
-
我很困惑。您返回
Page<Operation>但操作与域模型中的 Canceled 操作没有关系(至少在发布的代码中没有)。 得到一个空列到底是什么意思?
标签: java mysql sql spring-boot spring-data-jpa