У меня есть следующие объекты и их отношения в таблицах базы данных.
Entity TransactionType , который будет содержать основной набор данных, который никогда не изменится или будет меняться редко.
@Entity
@Table(name="ONB_TRANS_TYPE")
@Cacheable(true)
public class TransactionType implements Serializable {
private static final long serialVersionUID = -6630648311619744810L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer ID;
@Column(name = "TRANS_TYPE_NAME",unique=true)
private String transTypeName;
//getters and setters
}
Другой объект Enitity CandidateTransaction , который имеет внешний ключ от TransactionType, в таблице отношение между двумя таблицами является нормальным отношением Pk-FK.
@Entity
@Table(name="ONB_CANDIDATE_TRANS")
public class CandidateTransaction implements Serializable{
private static final long serialVersionUID = 3615632069112078119L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer ID;
//FK to ONB_Candidate_Info table
@Column(name="CANDIDATE_ID")
private String candidateId;
private UUID TRANS_IDENTIFIER;
@OneToOne
@JoinColumn(name="TRANS_TYPE_ID")
private TransactionTypeDTO transactionType;
}
У меня есть сделал однонаправленное OneToOneMapping между двумя объектами. Теперь, когда я хочу сохранить объект CandidateTransaction, я делаю следующее при сохранении, и он выдает мне сообщение о том, что вы не можете вставить ноль в TRANS_TYPE_ID. Я хочу спросить: нужно ли явно извлекать Trans_TYPE_ID из главной таблицы (ONB_TRANS_TYPE) или мне не следует делать это ORM ?? Как я дал сопоставление ??
@Service
public class CandidateTransactionManagerImpl implements CandidateTransactionManager {
@Autowired
private CandidateTransactionRepository candidateTransactionRepository;
@Autowired
private TransactionTypeRepository transactionTypeRepository;
@Override
public void saveTransactionProgress(String candidateId,CandidateProgressRequestBO candidateProgressRequestBO) throws ONBException {
CandidateTransaction savedInstance = new CandidateTransaction();
TransactionType transactionType ;
CandidateTransaction candidate;
if(CollectionUtils.isEmpty(candidateProgressRequestBO.getStepStatus()))
throw new ONBException("No Transaaction to Save! Transaction Object Empty",new Exception());
else {
for(CandidateProgressBO candidateProgress : candidateProgressRequestBO.getStepStatus()) {
transactionType = new TransactionType();
candidate = new CandidateTransaction();
candidate.setCandidateId(candidateId);
transactionType.setTransTypeName(candidateProgress.getStep().name());
candidate.setTransactionType(transactionType);
candidate.setMODIFIED_DATE(new Date());
savedInstance = candidateTransactionRepository.save(candidate);
System.out.println("Saved Isntance "+savedInstance);
}
}
}