2017-08-31 83 views
6

yol açar Hazırda varlıkları temsil eden üç KOTLIN en sınıfları: id sonradan doSomething çağırmak için ben ayarlayıcı geçersiz kılmak gerekgeçersiz kılma KOTLIN malı ayarlayıcı iki JPA @id

@MappedSuperclass 
abstract class Parent { 
    @Id @GeneratedValue @Column(nullable=false) 
    var id: Long? = null 
} 

@Entity 
class Child1 {} 

@Entity 
class Child2 { 
    @Id @GeneratedValue @Column(nullable=false) 
    override var id: Long? = null 
     set(value) { 
      super.id = value 
      doSomething() 
     } 
} 

Not. Daha önce Java'da yaptığım id iddi.

Bu doğru oluşturur, ancak hazırda bunu sevmez: Doğru yeri etkilenmez ben overriden id şüpheli diğer bazı hata itibaren

A foreign key refering Child2 from ... has the wrong number of column. Should be 2. 

ve Hazırda iki kez id sütunu tespit - Parent ve Child2 dan.

override var id: Long? 
    get() = super.id 
    set(value) { 
     super.id = value 
     doSomething() 
    } 

hile:

+0

Gerçekten 'id' geçersiz kılınmış sürümünde ek açıklama eklemeniz gerekiyor mu? (Kendimi denemedi) – Xvolks

+0

Ben de denedim, ama sonra yol açar: 'Varlık için eşleme sütununda yinelenen sütun: Child2 sütun: id (insert =" false "update =" false "ile eşleştirilmelidir)' –

cevap

2

yanlışlıkla bir çözüm bulundu

  1. alan
  2. super

bağlayan bir alıcı oluşturmak için bir değer atama değil Bu şekilde Kotlin, varlık üzerinde yeni bir alan yaratmayacak ve sadece alıcı/ayarlayıcıyı geçersiz kılmak.