JPA OneToOne关系

My *_*rts 5 java hibernate jpa playframework

我正在使用Play框架构建一个项目,我无法理解JPA @OneToOne relationships.

我目前有两个班:


用户对象

@Entity
@Table( name="users" )
public class Users extends Model {

    @OneToOne( mappedBy="userId", fetch=FetchType.LAZY, cascade = CascadeType.ALL )
    @ForeignKey( name="userId", inverseName="userId" )
    UserSettings userSettings;
    public userId;
    public userName;
}
Run Code Online (Sandbox Code Playgroud)


用户设置

@Entity
@Table( name="user_settings" )
public class UserSettings extends Model {

    @OneToOne( cascade = CascadeType.ALL,targetEntity=User.class )
    public String userId;
    public String xml;

    public UserSettings( String userId ){
        this.userId = userId;
    }
}
Run Code Online (Sandbox Code Playgroud)


我的想法是,我试图将该userId字段设置为内部User的外键UserSettings.我尝试了几种不同的方法来实现这一点,我的代码总是抛出一个错误.我回忆的最常见的错误是: 引用的属性不是(一个|多个)ToOne.

然而,当我尝试设置userIdUserSettings使用上面的代码,我收到以下异常:

已捕获到javax.persistence.PersistenceException,org.hibernate.PropertyAccessException:无法通过reader.User.id的反射getter获取字段值

任何人都可以帮助解释我如何实现我期望的目标吗?

Rya*_*art 5

阅读关于实体和值之间差异的hibernate参考的5.2节.您正在尝试将String映射为实体.只有实体可以是(一个|多个)ToOne,因为错误告诉你.即,而不是String userId,你应该使用User user,而不是mappedBy="userId",mappedBy="user".