下面是我写的实体类和方法。当我尝试使用 Spring Data JPA 插入实体时,我正在正确设置所有值并且实体正在保存。但是根据我在实体类中做的休眠映射,元数据实体应该有定义实体的引用。但是保存操作我看到元数据表中的定义引用为空。
{
@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;
}
}