Below are the entity classes and the methods I have written . When I tries to insert the entities using Spring Data JPA , I am stetting all the values properly and the entities are getting saved . But according the hibernate mapping that I have done in the entity classes , the metadata entity should have the reference of the definition entity. But the save operation I see that the definition reference in metadata table is null.
{
@Entity
@Table(name = "tbl_oval_metadata")
@TypeDef(name = "JsonDataUserType", typeClass = JsonDataUserType.class)
@Setter
@Getter
public class ScapOvalMetaDataEntity implements Serializable {
private static final long serialVersionUID = -396508789136807102L;
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "metadata_id", unique = true, updatable = false, nullable = false)
private UUID metaDataId;
@Type(type = "JsonDataUserType")
@Column(name = "metadata_attribute")
private Map<String, String> metaDataAttribute;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumns({ @JoinColumn(name = "definition_id", insertable = false, updatable = false),
@JoinColumn(name = "oval_component_ref", insertable = false, updatable = false) })
private ScapOvalDefinitionEntity definitionRef;
}
@Entity
@Table(name = "tbl_oval_definition")
@TypeDef(name = "JsonDataUserType", typeClass = JsonDataUserType.class)
@Setter
@Getter
public class ScapOvalDefinitionEntity implements Serializable {
private static final long serialVersionUID = -6519931678692523212L;
@EmbeddedId
private DefinitionEmbededdableKey definitionEmbeddableKey;
@Column(name = "definition_class")
private String definitionClass;
@Type(type = "JsonDataUserType")
@Column(name = "definition_attribute")
private Map<String, String> definitionAttribute;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "definitionRef")
private ScapOvalMetaDataEntity metaData;
}
@Embeddable
@Setter
@Getter
@EqualsAndHashCode
@ToString
public class DefinitionEmbededdableKey implements Serializable{
private static final long serialVersionUID = -7612918663883354788L;
@Column(name = "definition_id", unique = true, nullable = false)
private String definitionId;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "oval_component_ref", nullable = false)
private ScapOvalDefinitionComponentEntity ovalComponentRef;
}
definitionDAO.save(Utilities.modelToEntityConverter(scapProcessor, ovalComponentEntity));
public static List<ScapOvalDefinitionEntity> modelToEntityConverter(ScapParser scapProcessor,
ScapOvalDefinitionComponentEntity ovalComponentEntity) {
List<ScapOvalDefinitionEntity> definitionEntities = new ArrayList<>();
Set<Definition> definitionSet = scapProcessor.getDefinitionSet();
for (Definition definition : definitionSet) {
definitionEntities.add(modelToEntityConverter(scapProcessor, definition, ovalComponentEntity));
}
return definitionEntities;
}
private static ScapOvalDefinitionEntity modelToEntityConverter(ScapParser scapProcessor, Definition definition,
ScapOvalDefinitionComponentEntity ovalComponentEntity) {
ScapOvalDefinitionEntity definitionEntity = new ScapOvalDefinitionEntity();
DefinitionEmbededdableKey definitionEmbededdableKey = new DefinitionEmbededdableKey();
definitionEmbededdableKey.setDefinitionId(definition.getDefinitionId());
definitionEmbededdableKey.setOvalComponentRef(ovalComponentEntity);
definitionEntity.setDefinitionEmbeddableKey(definitionEmbededdableKey);
definitionEntity.setDefinitionAttribute(definition.getDefinitionAttribute());
definitionEntity.setDefinitionClass(definition.getDefinitionClass());
definitionEntity.setMetaData(modelToEntityConverter(definition, definitionEntity));strong text
return definitionEntity;
}
private static ScapOvalMetaDataEntity modelToEntityConverter(Definition definition,
ScapOvalDefinitionEntity definitionEntity) {
ScapOvalMetaDataEntity metaDataEntity = new ScapOvalMetaDataEntity();
metaDataEntity.setDefinitionRef(definitionEntity);
metaDataEntity.setMetaDataAttribute(definition.getDefinitionMetaData().getMetaDataAttribute());
return metaDataEntity;
}
}