SORU
10 Kasım 2008, PAZARTESİ


Hazırda JPA Sırası (non-Id)

Bazı sütun için DB bir dizi kullanmak mümkün oluyortanımlayıcı/kompozit tanımlayıcı bir parçası değil?

Jpa provider olarak hazırda kullanıyorum ve tanımlayıcı bir parçası olmadıkları halde değerler (bir dizi) kullanarak oluşturulan, bazı sütunları olan bir tablo var.

İstediğim şey için sıra sütun bir varlık için yeni bir değer oluşturmak için bir dizi kullanmaktırDEĞİL(parçası), birincil anahtar:

@Entity
@Table(name = "MyTable")
public class MyEntity {

    //...
    @Id //... etc
    public Long getId() {
        return id;
    }

   //note NO @Id here! but this doesn't work...
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "myGen")
    @SequenceGenerator(name = "myGen", sequenceName = "MY_SEQUENCE")
    @Column(name = "SEQ_VAL", unique = false, nullable = false, insertable = true, updatable = true)
    public Long getMySequencedValue(){
      return myVal;
    }

}

Ben bunu yaptığım zaman sonra:

em.persist(new MyEntity());

kimliği oluşturulur, ancak mySequenceVal tesiste ayrıca JPA sağlayıcısı tarafından oluşturulur.

Sadece bazı şeyleri açıklığa kavuşturmak istiyorumHazırda BekletmySequencedValue özelliği için bir değer yaratmak. Hazırda bekleme veritabanı tarafından oluşturulan değerleri işleyebilir biliyorum, ama bir tetikleyici ya da başka bir şey kendisi benim özelliğinin değeri oluşturmak için Hazırda dışında kullanmak istemiyorum. Eğer Hazırda birincil anahtar değerleri oluşturabilir, neden bu basit bir özellik için oluşturabilir mi?

CEVAP
11 ŞUBAT 2009, ÇARŞAMBA


Bu soruna cevap arayan, this link sendeledi

Hazırda bekleme/JPA otomatik olarak non-ıd-özellikleri sizin için bir değer oluşturmak mümkün değil gibi görünüyor. @GeneratedValue Açıklama @Id ile birlikte Otomatik Sayı oluşturmak için kullanılır.

@GeneratedValue ek açıklama veritabanı bu değeri kendisi üretiyor Hazırda söyler.

Çözüm (ya da çözüm) oluşturulmuş bir Kimlik, böyle bir şey ile ayrı bir varlık yaratmak için forumda önerilen:

@Entity
public class GeneralSequenceNumber {
  @Id
  @GeneratedValue(...)
  private Long number;
}

@Entity 
public class MyEntity {
  @Id ..
  private Long id;

  @OneToOne(...)
  private GeneralSequnceNumber myVal;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bryan Adams

    Bryan Adams

    30 Mart 2006
  • KIT KAT

    KIT KAT

    3 EKİM 2005
  • MrMimoB

    MrMimoB

    11 NİSAN 2011