Как я могу обновить DiscriminatorColumn? - PullRequest
0 голосов
/ 25 мая 2020

У меня следующая иерархия:

AbstractUserModel. java

    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    import com.fasterxml.jackson.annotation.JsonSubTypes;
    import com.fasterxml.jackson.annotation.JsonTypeInfo;

    import javax.persistence.*;
    import javax.validation.Valid;
    import javax.validation.constraints.Min;
    import javax.validation.constraints.NotNull;

    @Entity
    @Table(name = "user")
    @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(name = "user_type" , discriminatorType = DiscriminatorType.STRING)
    @JsonTypeInfo (use = JsonTypeInfo.Id.NAME , property = "userType" , visible = true)
    @JsonSubTypes ({@JsonSubTypes.Type(value = TouristUserModel.class, name = AbstractUserModel.TOURIST),
                    @JsonSubTypes.Type(value = BusinessUserModel.class, name = AbstractUserModel.BUSINESSMAN)})
    @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
    public abstract class AbstractUserModel
    {
        public static final String TOURIST = "tourist";
        public static final String BUSINESSMAN = "businessman";

        @Id
        @Column(name = "user_id")
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        protected Integer id;

        @NotNull
        @Column(name = "user_name", length = 50)
        protected String name;

        @NotNull
        @Min(0)
        @Column(name = "age")
        protected Integer age;

...

TouristUserModel. java

@Entity
@DiscriminatorValue(AbstractUserModel.TOURIST)
@JsonTypeName(value = AbstractUserModel.TOURIST)
public class TouristUserModel extends AbstractUserModel
{
}

BusinessUserModel. java

@Entity
@DiscriminatorValue(AbstractUserModel.BUSINESSMAN)
@JsonTypeName(value = AbstractUserModel.BUSINESSMAN)
public class BusinessUserModel extends AbstractUserModel
{
}

Как мне обновить столбец UserType (user_type в БД)? Например, превратите туриста в бизнесмена.

В примерах @DiscriminatorColumn, которые я видел, ни у одного из них не было различающего столбца в качестве поля в своей модели. У меня также были разные проблемы, когда я пытался поместить это как поле в свою модель, так что, вероятно, это не рабочее решение.

Если это вам поможет, я использую Spring Boot 2.2.6 и Spring Data JPA для обработки уровня данных.

...