【发布时间】:2020-06-27 23:47:52
【问题描述】:
我在 SpringBoot JPA 服务中有一个要求,其中列的主键值必须存储在同一实体的另一列中。在下面的示例中,rowId 由StringPrefixedLineSequenceIdGenerator 生成。无论它产生什么价值,我都需要将其存储在lineId 列中。
@Entity
@Table(name="CX_LINE")
public class CXLine {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "cx_line_seq")
@GenericGenerator(
name = "cx_line_seq",
strategy = "com.tmo.chub.entity.generator.StringPrefixedLineSequenceIdGenerator"/*,
parameters = {@Parameter(name = StringPrefixedLineSequenceIdGenerator.VALUE_PREFIX_PARAMETER, value = "2-XP-"),
@Parameter(name = StringPrefixedLineSequenceIdGenerator.NUMBER_FORMAT_PARAMETER, value = "%04d")}*/)
@Column(name="row_id")
private String rowId;
@Column(name="LINE_ID")
private String lineId;
//getters & setters
}
问题是,@id 的值在repo.save() 之前对我不可用。有没有办法从休眠会话或其他东西中获取生成的值?或者是否可以将@GeneratedValue 和@GenericGenerator 用于@id 以外的列?
我目前正在进行 2 次保存。我将保存具有唯一值(输入)的新 CXline,然后再次执行更新,如下所示。在这里感谢任何输入。
CXLine existingLine = lineRepo.findByExtLineId(payload.getCustomerProfile().getCustomerId());
if(existingLine !=null){
//do update
}
else{
CXLine newLine = new CXLine();
newLine.setLineId(payload.getCustomerProfile().getCustomerId());
// set other columns
lineRepo.save(newLine);
CXLine lineToUpdateLineId = lineRepo.findByExtLineId(payload.getCustomerProfile().getCustomerId());
lineToUpdateLineId.setLineId(lineToUpdateLineId.getRowId());
lineRepo.save(newLine);
}
【问题讨论】:
标签: hibernate spring-boot jpa