Итак, у меня есть класс сущности "RecipeClientConfig", который имеет отношение "многие к одному" с "RecipeClientConfigParam"
RecipeClientConfig:
@Entity
@Table(name="recipe_client_config", schema="app")
public class RecipeClientConfig {
@Id
@Column(name="recipe_client_config_id")
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "sequence-generator"
)
@SequenceGenerator(
name = "sequence-generator",
sequenceName = "app.recipe_client_config_seq",
allocationSize=1
)
private long recipeClientConfigId;
@Column(name="recipe_setup_id")
private int recipeSetupId;
@Column(name="personid", columnDefinition = "NVARCHAR(10)")
private String personId;
@Column(name="from_account_num")
private String fromAccountNum;
@Column(name="to_account_num")
private String toAccountNum;
@Column(name="status", columnDefinition = "CHAR(1)")
private String status;
@OneToMany(mappedBy="recipeClientConfig", cascade = CascadeType.ALL, fetch= FetchType.EAGER)
private List<RecipeClientConfigParam> configParams = new ArrayList<>();
RecipeClientConfigParam:
@Entity
@Table(name="recipe_client_config_params", schema="app")
public class RecipeClientConfigParam {
@Id
@Column(name="recipe_client_config_param_id")
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "sequence-generator"
)
@SequenceGenerator(
name = "sequence-generator",
sequenceName = "app.recipe_client_config_params_seq",
allocationSize=1
)
private long recipeClientConfigParamId;
@Column(name="param_name", columnDefinition = "NVARCHAR(50)")
private String paramName;
@Column(name="param_value", columnDefinition = "NVARCHAR(50)")
private String paramValue;
@ManyToOne
@JoinColumn(name = "recipe_client_config_id", nullable = false, updatable = false, insertable = true)
private RecipeClientConfig recipeClientConfig;
Теперь эта RecipeConfiguration может обновляться пользователем, где он передает объект DTO и затем сопоставляется с сущностью JPA.Некоторые из этих RecipeConfigParameters могут или не могут быть обновлены.
Это мой метод сохранения:
public void saveRecipeConfig (RecipeClientConfig recipeConfig) {
recipeConfig.setLastupdDat(LocalDateTime.now());
recipeConfig.setCreateDate(LocalDateTime.now());
List<RecipeClientConfigParam> params = recipeConfig.getConfigParams();
if (params != null) {
for (RecipeClientConfigParam param : params) {
param.setRecipeClientConfig(recipeConfig);
param.setCreateOp(recipeConfig.getPersonId());
param.setLastupdOp(recipeConfig.getPersonId());
param.setCreateDate(LocalDateTime.now());
param.setLastupdDat(LocalDateTime.now());
}
}
configRepository.saveAndFlush(recipeConfig);
}
Если я просто сохраню обновленный объект сущности RecipeConfig, все поля и параметры RecipeConfigParameters отсутствуют в объекте обновления, но присутствуют вбаза данных будет удалена.
Не все поля показаны в коде выше для простоты, и некоторые поля и объекты Parameter действительно не могут быть обновлены.
Я действительно хочу избежатьизвлекает объект сущности RecipeConfig с помощью findById () или getOne (), а затем проходит через каждое поле и объект Parameter, чтобы проверить, находится ли он уже в БД.Есть лучший способ сделать это?Спасибо!