2011-07-08 39 views
1

JPA + Hibernate的一組新的實體不會保持

我使用此代碼創建一個新的AvatarAttributeOwnershipAAO),並將其分配給玩家。但是,新的AAO未持久保存到數據庫。

   // get player 
       player = em.find(Player.class, playerId); 

       .... 

       // give attribute 
       player.getAvatarAttributeOwnership().add(new AvatarAttributeOwnership(player, atr.key())); 

       // save 
       em.persist(player); 

實體:

@Entity 
public class Player implements Serializable { 



    @Id 
    @GeneratedValue 
    private long id; 

    @OneToMany(fetch=FetchType.LAZY,mappedBy="owner") 
    private Set<AvatarAttributeOwnership> ownedAvatarAttributes; 

    ... 

} 


@Entity 
@Table([email protected](columnNames={"owner","gender","type","attrId"})) 
public class AvatarAttributeOwnership implements Serializable { 


    @Id 
    @GeneratedValue 
    @SuppressWarnings("unused") 
    private long id; 

    @ManyToOne 
    @JoinColumn(name="owner") 
    private Player owner; 

    ... 

    @Override 
    public int hashCode() { 
     final int prime = 31; 
     int result = 1; 
     result = prime * result + attrId.hashCode(); 
     result = prime * result + gender.hashCode(); 
     result = prime * result + owner.hashCode(); 
     result = prime * result + type.hashCode(); 
     return result; 
    } 

    @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 (!owner.equals(other.owner)) return false; 
     if (!type.equals(other.type)) return false; 

     return true; 
    } 

} 

回答

1

不知道在什麼地方,但我想你可能需要一個cascade="all"屬性在玩家的一對多(不知道我現在還在使用HBM文件)。

相關問題