6
Actualmente estoy usando un código como este para agregar una nueva entrada a un conjunto en mi entidad.Insertar en la colección JPA sin cargarlo
player = em.find(Player.class, playerId);
player.getAvatarAttributeOwnership().add(new AvatarAttributeOwnership(...));
Funciona, pero cada vez que quiero agregar un elemento, se carga todo el conjunto.
- ¿Hay alguna manera (con una consulta tal vez) de agregar el artículo sin cargar el resto? En SQL sería algo así como
INSERT INTO AvatarAttributeOwnership(player, data, ...) VALUES({player}, ...);
Actualmente la exclusividad se mantiene mediante el contrato deSet
yAvatarAttributeOwnership.equals
, pero supongo que ya no funcionará. ¿Cómo puedo aplicarlo de todos modos?
Estoy usando JPA2 + Hibernate. Código:
@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;
}
...
}
¿Ha confirmado mis obras sugerencia? – Bozho
@Bozho Todavía no, ya que actualmente necesito enfocarme en hacer que otras cosas funcionen en lugar de optimizar esto, pero supongo que funciona. –
También asumo, pero no lo he probado, por lo que puedes desmarcar la respuesta aceptada por ahora :) – Bozho