2011-07-25 22 views
6

Halihazırda varlığımda kümeye yeni bir giriş eklemek için bu kodu kullanıyorum.Yüklemeden JPA koleksiyonuna ekle

player = em.find(Player.class, playerId); 
player.getAvatarAttributeOwnership().add(new AvatarAttributeOwnership(...)); 

Çalışıyor, ancak her seferinde bir öğe eklemek istiyorum, tüm set yüklenir.

  1. Kalan öğeyi yüklemeden öğeye eklemek için bir yol var mı? SQL'de,
  2. gibi bir şey olacaktır. Şu anda Set ve AvatarAttributeOwnership.equals sözleşmesi tarafından teklik sürdürülmektedir, ancak artık işe yaramayacağını varsayalım. Yine de nasıl uygularım?

JPA2 + Hazırda Bekletme'yi kullanıyorum. Kod:

@Entity 
public class Player implements Serializable { 

    @Id 
    @GeneratedValue 
    private long id; 

    @ElementCollection(fetch=FetchType.LAZY) 
    // EDIT: answer to #2 
    @CollectionTable([email protected](columnNames={"Player_id","gender","type","attrId"})) 
    Set<AvatarAttributeOwnership> ownedAvatarAttributes; 

    ... 

} 

@Embeddable 
public class AvatarAttributeOwnership implements Serializable { 

    @Column(nullable=false,length=6) 
    @Enumerated(EnumType.STRING) 
    private Gender gender; 

    @Column(nullable=false,length=20) 
    private String type; 

    @Column(nullable=false,length=50) 
    private String attrId; 

    @Column(nullable=false) 
    private Date since; 

    @Override 
    public boolean equals(Object obj) { 

     if (this == obj) return true; 
     if (obj == null) return false; 
     if (getClass() != obj.getClass()) return false; 

     AvatarAttributeOwnership other = (AvatarAttributeOwnership) obj; 

     if (!attrId.equals(other.attrId)) return false; 
     if (gender != other.gender) return false; 
     if (!type.equals(other.type)) return false; 

     return true; 
    } 

    ... 

} 
+0

Benim önerim çalışmaları doğruladı? – Bozho

+0

@Bozho Henüz değil, şu anda bunu optimize etmek yerine başka şeyler yapmaya odaklanmam gerekiyor, ancak çalıştığını varsayalım. –

+0

Ayrıca varsayalım, ama denemedim, bu yüzden şimdilik kabul edilen cevabı kaldırabilirsiniz :) – Bozho

cevap