2012-06-21 3 views
2

У меня есть SCALA черта следующегоКак переопределить имя переменного признака в Scala

trait Id { 
      @javax.persistence.Id 
      @GeneratedValue(strategy=GenerationType.IDENTITY) 
      @BeanProperty 
      var id: Long = _ 
} 

Теперь у меня есть объект (лицо), который я хочу продлить черту Id, но изменить имя столбца идентификатора PersonId. Как я могу это достичь?
Person Отрывок Ниже:

@NamedQuery(name=”findAll”,query=”select p from Person p”) 
class Person extends Id { 
    @BeanProperty 
    @Column(name=”personid”) 
    def personid = id 
} 

ответ

4

Вы можете ввести метод personid который возвращает значение id:

trait Person extends Id { 
    def personid = id 
} 

Удаление id элемента в Person нарушил бы принцип, что подкласс экземпляры всегда должны быть доступны как если бы они были экземпляром базового класса. То есть, если Person расширяет Id, вы должны иметь возможность называть все методы id, иначе вы не смогли бы присвоить объект типа Person ссылочной позиции типа Id.

Итак, если вы продляете Id, расширенный признак/класс будет всегда иметь id.

Вы можете, однако, ограничивать видимость id в базовой черте Id путем id частного пакета:

private[package_name] var id: Long = _ 
+0

Теперь вставка работает, но когда я попытался загрузить список Entity, я получаю сообщение об ошибке: Unkno wn column 'person0_.id' в 'списке полей'. – kombo

+0

Можете ли вы отредактировать свой пост с полным сжатым фрагментом, который вы выполняете? – axel22

2

Если то, что вы хотите сделать, это просто переопределить имя столбца, используемое JPA для то вы должны иметь возможность использовать аннотацию AttributeOverride.

Это может выглядеть примерно так:

@MappedSuperclass 
trait Id { 
     @javax.persistence.Id 
     @GeneratedValue(strategy=GenerationType.IDENTITY) 
     @BeanProperty 
     var id: Long = _ 
} 

@Entity 
@AttributeOverride(name="id", [email protected](name="personid")) 
class Person extends Id 

Если вы хотите изменить имя свойства, используемое для доступа id, то вы могли бы сделать что-то вроде Алекс предлагая ...

Edit: Забыли чтобы объект Person протянул знак Id

Смежные вопросы