Hibernate Transient Расширяет проблему - PullRequest
3 голосов
/ 08 апреля 2010
@MappedSuperclass
public abstract class BaseAbstract implements Serializable{

 private static final long serialVersionUID = 1L;

 protected String test = //some random value;

 public String getTest() {
  return test;
 }

 public void setTest(String test){
  this.test = test;
 }
}


@Entity
public class Artist extends BaseAbstract
{
  private static final long serialVersionUID = 1L;
  private Integer id;

        @override
 @Transient
 public String getTest() {
  return test;
 }
.....
}

У меня вопрос ... когда я пытаюсь выполнить какую-либо операцию с художником, вместе с идентификатором и именем, тест также сохраняется, чего не должно быть ...

если я добавлю такой же переходный процесс в метод getTest () класса baseabstract, я увижу, что тестовый столбец НЕ создается (в идеале, как это должно происходить), но если я пытаюсь переопределить метод добавлением аннотации в подкласс, он создает тестовая колонка ...

Я не знаю, почему это происходит, потому что, когда hibernate создает объект Artist и проверяет аннотации, он должен видеть временную аннотацию, присутствующую в методе getTest () метода Artist ... и не должен создавать столбец в базе данных. ...

Дайте мне знать, если вам нужны какие-либо разъяснения ....

Любой ответ на этот вопрос очень ценится ...

Спасибо

Ответы [ 2 ]

4 голосов
/ 08 апреля 2010

Когда вы помечаете родительский класс как @MappedSuperclass, вы говорите

Сохранять свои свойства для каждого подкласса

Поскольку ваш родительский класс abstract (Вы не можете создать экземпляр абстрактного класса), сделайте следующее

@MappedSuperclass
public abstract class BaseAbstract implements Serializable {

    @Transient
    public String getTest() {

    }

}

И , если вы не хотите сохранять свойство getTest подкласса , повторите

@Entity
public class Artist extends BaseAbstract {


    @Transient
    public String getTest() {

    }

}

Ничего другого!

2 голосов
/ 08 апреля 2010

Я бы предложил поставить @Transient на само поле protected String test, а не на метод.

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