我安装了play-2.2.2但是在尝试访问ArrayList时遇到了一些Ebean @OneToMany关系的问题。
我基本上有一个User类,它包含一个Address类的ArrayList。代码如下:
@Entity
@Inheritance(strategy= InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE", discriminatorType = DiscriminatorType.STRING)
public class User extends Model{
@Id
private Long id;
@OneToMany(cascade=CascadeType.ALL)
private ArrayList<Address> addressList = new ArrayList<Address>();
...
public void addAdress(Address address){
this.addressList.add(address);
}
班级地址
@Entity
public class Address extends Model {
@Id
private Long id;
@ManyToOne
private User user;
...
现在假设我创建了一个新用户和一个新地址。我想将地址添加到新用户的ArrayList,然后保存它们。有点像这样:
User newUser = new User();
Address newAddress = new Address();
newUser.addAddress(newAddress);
newUser.save();
此代码的问题是地址未保存。不应该保存,因为我将CascadeType指定为all?
另一个问题是,大多数时候,我的用户将在地址之前创建。所以我要说我已经有了一个用户。现在我要做的是为现有用户添加一个新地址:
User user = User.getCurrentUser();
user.addAddress(new Address());
user.save();
此代码给出了一个错误,在方法addAddress中声明了NullPointerException。它基本上说我的addressList为null。这是为什么?我只是想不出来。任何帮助将不胜感激。
答案 0 :(得分:0)
这应该只是因为您的JPA注释未正确分配。
您应该通过添加查找信息告诉ebean如何获取地址,否则它不知道如何执行此操作:
@OneToMany(cascade=CascadeType.ALL, mappedBy = "id") // id is the field name in Address
private Set<Address> addressList;
你也应该按建议使用Set:http://www.avaje.org/manydatatypes.html
更喜欢set的原因并不在我的脑海中,但我记得当你进行多次获取连接时,列表可能会导致问题。
并在您的地址类中:
@ManyToOne
@JoinColumn(name = "(the id column name in user table)")
private User user;