Обновление определенных сущностей ManyToOne без удаления - PullRequest
0 голосов
/ 23 ноября 2018

Итак, у меня есть класс сущности "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, чтобы проверить, находится ли он уже в БД.Есть лучший способ сделать это?Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...