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.
- Kalan öğeyi yüklemeden öğeye eklemek için bir yol var mı? SQL'de,
gibi bir şey olacaktır. Şu andaSet
veAvatarAttributeOwnership.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;
}
...
}
Benim önerim çalışmaları doğruladı? – Bozho
@Bozho Henüz değil, şu anda bunu optimize etmek yerine başka şeyler yapmaya odaklanmam gerekiyor, ancak çalıştığını varsayalım. –
Ayrıca varsayalım, ama denemedim, bu yüzden şimdilik kabul edilen cevabı kaldırabilirsiniz :) – Bozho