SORU
1 Mayıs 2010, CUMARTESİ


Sabit değerler ile JPA Sırala göster?

Bir numaralama JPA kullanarak göster için farklı yollar arıyorum. Ben özellikle her isimli giriş tamsayı değeri ayarlamak için sadece bir tamsayı değeri kaydetmek istiyorum.

@Entity
@Table(name = "AUTHORITY_")
public class Authority implements Serializable {

  public enum Right {
      READ(100), WRITE(200), EDITOR (300);

      private int value;

      Right(int value) { this.value = value; }

      public int getValue() { return value; }
  };

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name = "AUTHORITY_ID")
  private Long id;

  // the enum to map : 
  private Right right;
}

Basit bir çözüm EnumType ile Numaralandırılmış açıklama kullanmaktır.SIRA:

@Column(name = "RIGHT")
@Enumerated(EnumType.ORDINAL)
private Right right;

Ama bu durumda haritalar numaralama Endeksi (0,1,2) ve istediğim değeri (100,200,300) JPA.

İnci buldum iki çözüm basit görünmüyor...

İlk Çözüm

Bir çözüm, proposed here ve @PostLoad PrePersist @başka bir alana numaralama dönüştürmek ve geçici olarak numaralama alanı işaretlemek için kullanır:

@Basic
private int intValueForAnEnum;

@PrePersist
void populateDBFields() {
  intValueForAnEnum = right.getValue();
}

@PostLoad
void populateTransientFields() {
  right = Right.valueOf(intValueForAnEnum);
}

İkinci Çözüm

proposed here genel bir dönüşüm önerilen nesne, ama yine de ağır görünüyor ikinci çözüm ve Hazırda odaklı (@Tip Java EE içinde çıkış yok):

@Type(
    type = "org.appfuse.tutorial.commons.hibernate.GenericEnumUserType",
    parameters = {
            @Parameter(
                name  = "enumClass",                      
                value = "Authority$Right"),
            @Parameter(
                name  = "identifierMethod",
                value = "toInt"),
            @Parameter(
                name  = "valueOfMethod",
                value = "fromInt")
            }
)

Başka bir çözüm var mı ?

Aklımda birkaç fikir var ama eğer JPA var mı bilmiyorum:

  • ve Yetkiye yükleme ve kaydetme nesne Yetkilisi Sınıfın hemen üye alıcı ve ayarlayıcı yöntemleri kullanın
  • eşdeğer bir fikir numaralama yöntemleri nelerdir JPA söylemek numaralama int dönüştürmek ve numaralama için int olacaktır
  • Bahar kullanıyorum çünkü, JPA belirli bir dönüştürücü (RightEditor) kullanmak söylemek için herhangi bir yolu var mı ?

CEVAP
1 Mayıs 2010, CUMARTESİ


JPA name ordinal onların kendi tarafından çeteleler ile başa çıkmak için sadece iki yol sağlar. Ve standart JPA özel türlerini desteklemiyor. Yani:

  • Eğer özel tür dönüşümleri yapmak istiyorsanız, sağlayıcı bir uzantısı (Hazırda bekleme UserType, EclipseLink Converter, vb.) kullanman gerekecek. (ikinci çözüm). ~veya~
  • @PrePersist kullanman gerekecek ve @hilesi (ilk çözüm) PostLoad. ~veya~
  • Açıklama alıcı ve ayarlayıcı ve int değeri ~veya~ alarak dönüyor
  • Varlık düzeyinde bir tamsayı öznitelik kullanın ve alıcıları ve ayarlayıcıları bir çeviri gerçekleştirmek.

En son seçeneği (bu temel bir uygulama, gerekli bir araç olduğunu) göstermek istiyorum:

@Entity
@Table(name = "AUTHORITY_")
public class Authority implements Serializable {

    public enum Right {
        READ(100), WRITE(200), EDITOR (300);

        private int value;

        Right(int value) { this.value = value; }    

        public int getValue() { return value; }

        public static Right parse(int id) {
            Right right = null; // Default
            for (Right item : Right.values()) {
                if (item.getValue()==id) {
                    right = item;
                    break;
                }
            }
            return right;
        }

    };

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "AUTHORITY_ID")
    private Long id;

    @Column(name = "RIGHT_ID")
    private int rightId;

    public Right getRight () {
        return Right.parse(this.rightId);
    }

    public void setRight(Right right) {
        this.rightId = right.getValue();
    }

}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Lamborghini

    Lamborghini

    13 Aralık 2005
  • lane182videos

    lane182video

    6 EKİM 2011
  • NCIX Tech Tips

    NCIX Tech Ti

    2 Ocak 2007