Игнорировать столбец, если не существует в таблице Spring Data JPA - PullRequest
1 голос
/ 05 марта 2020

У меня есть класс абстракции, как показано ниже:

@MappedSuperclass
public  abstract class BaseEntity {

    @Id
    Long id;
    String name;

//getters and setters 
}

и расширение двух сущностей BaseEntity

Класс кулака

@Entity
@Table(name= "table1")
public class TValideB  extends BaseEntity {

 @Column(name = "phone")
 String phone;

}

Второй класс

@Entity
@Table(name= "table2")
public class TValide extends BaseEntity {

    @Colmun(name = "mail")
    String mail;

}

Когда я пытаюсь сохранить TValide, я получаю такую ​​ошибку non valid column "name"; В моей таблице 2 нет столбца для имени.

Мой вопрос: как мне проигнорировать этот столбец и сохранить мою сущность? Существуют ли другие подходы без удаления имени столбца из абстрактного класса?

Ответы [ 4 ]

1 голос
/ 05 марта 2020

Если вам нужно использовать базовые классы, вы можете создать два.

@MappedSuperclass
public  abstract class BaseEntityWithId {

    @Id
    Long id;

//getters and setters 
}

@MappedSuperclass
public  abstract class BaseEntityWithName extends BaseEntityWithId {

  String name;    

//getters and setters 
}

Тогда вам просто нужно выбрать правильный класс в зависимости от расположения столбцов таблицы.

0 голосов
/ 06 марта 2020

Я просто добавляю @Column в имени с помощью inserttable = false, Updatable = false. Редактируйте мой абстрактный класс, как показано ниже:

@MappedSuperclass
public  abstract class BaseEntity {

    @Id
    Long id;
    @Column(name = "name", insertable=false, updatable=false)
    String name;

//getters and setters 
}

При таком подходе мне не нужно создавать много абстрактных классов или переписывать атрибуты переопределения. .

0 голосов
/ 05 марта 2020

Измените способ использования абстракции. Создайте новый абстрактный класс, который расширяет BaseEntity, содержит поля, которые используются редко.

Пример:

@MappedSuperclass
public  abstract class BaseEntity {

   @Id
   Long id;

   //getters and setters 
}


@MappedSuperclass
public  abstract class BaseNameEntity extends BaseEntity {

   String name;

   //getters and setters 
}


@Entity
@Table(name= "table1")
public class TValideB  extends BaseNameEntity {

  @Column(name = "phone")
  String phone;

  //getters and setters 
}



@Entity
@Table(name= "table2")
public class TValide extends BaseEntity {

  @Column(name = "mail")
  String mail;

  //getters and setters 
}

Таким образом вы можете настроить всю свою структуру.

0 голосов
/ 05 марта 2020

Это должно решить вашу проблему. В вашем классе, который расширяет BaseEntity, сделайте это для столбца, который вам не нужен.

@Entity
@AttributeOverride(name = "name", column = @Column(name = "name", insertable = false, updatable = false)
public class TValide extends BaseEntity {

    @Colmun(name = "mail")
    String mail;

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