2010-02-23 72 views
0

在我的春天/ OpenJPA的基于应用程序中,我有两个简单的实体:JPA合并问题

@Entity 
public class Game { 

@Id 
@GeneratedValue 
protected Long id; 
@ManyToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE}) 
@JoinColumn(name = "target_id") 
protected GameObject target; 
...} 

@Entity 
public class GameObject { 

@Id 
@GeneratedValue 
protected Long id; 
@Column 
protected String name; 
@OneToMany(mappedBy = "target", cascade = CascadeType.ALL) 
protected Collection<Game> games; 
...} 

我想保存游戏对象关联targetObject:

@PersistenceContext 
protected EntityManager entityManager; 

@Override 
@Transactional 
public Game createEntity(Game entity) { 
    getEntityManager().persist(entity); 
    if (entity.getTarget() != null) { 
     entity.getTarget().getGames().add(this); 
    } 
    getEntityManager().getEntityManager().flush(); 
    return entity; 
} 

而且我得到的NullPointerException在行:entity.getTarget()。getGames()始终为空,事件如果我在这里设置空的hashmap。 :/为什么

+0

我认为这将有助于如果你可以显示调用'createEntity'的代码。特别是,如果你能够证明当你构造你的游戏对象时,你会有一条线,比如'games = new ArrayList ();' – John 2010-02-23 12:03:32

+0

其中是标题的“合并”吗? – Bozho 2010-02-23 13:05:56

回答

1

我建议有:

protected Collection<Game> games = new HashMap<Game>(); 

因此默认值将是一个空的集合(好习惯),而不是null(糟糕的做法)

+0

事实上,支持merge()(至少在OpenJPA上)是非常重要的,如果初始值设置为NULL,那么你不能在merge() – comeGetSome 2015-01-07 11:36:27