2012-02-29 43 views
1

我正尝试在我的系统中为主目录建模用户。我得到了下面的模型声明:Play中的相互参照字段

@Entity 
public class Directory extends Model { 
    public String name; 
    @ManyToOne public Directory parent; 
    @ManyToOne public User owner; 
    @OneToMany public Set<User> sharees; 
} 

@Entity 
public class User extends Model { 
    @Unique @Column(unique=true) public String username; 
    public String password; 
    public Directory homeDirectory; 

    public User(String username, String password) { 
    this.username = username; 
    this.password = password; 
    this.homeDirectory = new Directory(username, null, this); 
    } 
} 
  1. 当我创建一个用户,并调用.save(),我得到一个错误(A javax.persistence.PersistenceException已经被抓住了,org.hibernate.exception。 GenericJDBCException:无法插入:[models.User])。谁能解释为什么?

  2. 使用灯具,我可以测试这个吗?我需要在我的yaml文件中创建前向引用,但我不确定这是否可能。

感谢,

文森特。

回答

2
  1. 由于homeDirectory缺少@OneToOne注释引发错误。
    我假设你正在为每个用户创建一个目录。如果是这样的话,那么你也应该使用CascadeType.ALL,这样当用户被创建/删除时,这些目录会自动被创建/删除。
  2. 并且没有Yaml不支持前向引用,
    所以您必须在使用双向关系时解决此问题。