Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate中的关系问题_Java_Hibernate_Playframework - Fatal编程技术网

Java hibernate中的关系问题

Java hibernate中的关系问题,java,hibernate,playframework,Java,Hibernate,Playframework,我正在学习Hibernate和Play框架(还将Java添加到帐户…)。我在保存这种实体时遇到问题 @Entity @Table(name="users") public class User extends Model { @Required public String username; @Column(name="user_displayname",nullable=true) public String displayname;

我正在学习Hibernate和Play框架(还将Java添加到帐户…)。我在保存这种实体时遇到问题

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



        @Required
    public String username;

        @Column(name="user_displayname",nullable=true)
    public String displayname;

        @Password
        public String user_password;

        @Email
        @Column(name="user_email",nullable=false,unique=true)
        public String user_email;

        public String user_salt;

        public Date user_joindate;

        @ManyToOne
        @JoinTable(name="users_meta")
        public UserMeta userdata;

        @Required
        public boolean user_isActive;

        @OneToOne(targetEntity=UserPhotos.class,cascade=CascadeType.ALL)
        @JoinColumn(name="id",referencedColumnName="userID")
        public UserPhotos userPhoto;

        @ManyToMany(cascade=CascadeType.ALL)
        @JoinTable(name="links_rol2user")
        public List<Rol> rol;
        public User (String username, models.Pass password, String user_email) {
            this.username = username;
            this.user_password = password.getHashedPassword();
            this.user_salt = password.getUserHash();
            this.user_email = user_email;
            this.user_joindate = new Date();
            this.user_isActive = false;

        }
我试图保存userMeta,当我将userMeta对象设置为newUser(现在不可见)时,它会创建一个新记录,但它不会插入在newUser中创建的新ID

我需要什么样的关系?在我像现在这样调整代码之前,它是一个OneToOne关系,工作得很好,但是现在当我完成注册函数时,我有点突然想到我也需要保存userMeta对象

如果您需要更多信息,请告诉我,我不知道我是否解释得很好,只是想了解Hibernate如何处理关系,等等

添加UserMeta:

*/

//传递模型

public class Pass {

    protected String hashed;
    protected String userHash;

    public Pass(String passwordToHash, String salt) {

        StringBuffer passSalt = new StringBuffer(passwordToHash);
        this.userHash = DigestUtils.md5Hex(salt);
        passSalt.append(this.userHash);
        passSalt.append(Play.configuration.getProperty("application.passwordSalt"));

        this.hashed = DigestUtils.sha512Hex(passSalt.toString());

    }
    public String getHashedPassword() {
        return this.hashed;
    }
    public String getUserHash() {

        return this.userHash;
    }  

}那里似乎发生了很多事情!但是从我所能告诉你的,你的问题在于你传递到UserMeta的id

在扩展模型时,id由模型类生成。但是,只有在实体保存到数据库后才会设置该属性(因为id是由数据库自动生成的)

因此,由于您在保存用户对象之前将id传递到UserMeta,因此id的值将为null


如果可以在创建UserMeta对象之前保存User对象,那么代码应该可以工作。

UserMeta和Pass类是什么样子的?我曾经这样做过:),但是getUserMeta(userData变量)持久性将继续。例如,我保存用户对象时,出现了异常,它表示有关userData(带有连接的变量等)的某些信息,即它必须是暂时的或其他信息,因为就目前而言,当我保存用户对象时,它希望变量也有某种类型的数据要保存(…好吧,既然我得到了我的支持(几次尝试后有点发疯了),我会努力想办法,欢迎大家提出任何建议:)一个选择是扩展GenericModel而不是Model,并创建自己的id,或者通过用户电子邮件链接,因为它是唯一的,而且你有预先的价值。我很想知道你第一次保存用户对象时的错误是什么。我不知道为什么会失败。我会好好考虑一下,很抱歉回答得太晚,这是忙碌的一周。谢谢你的帮助!
@Entity
@Table(name="users_meta")
public class UserMeta extends Model {

    @Lob
    @Column(name="userBio")
    public String userBio;
    @Column(name="userPhotoID",nullable=true)
    public Long userPhotoID = null;
    @Column(name="userRoleID", nullable=false)
    public Long userRoleID = 2L;


    @Lob
    public String userDescription;
    @Column(name="userViews", nullable=false)
    public Long userViews = 0L;
    @Column(name="userFavoriteCount", nullable=false)
    public Long userFavoriteCount = 0L;
    @Column(name="userTotalComments", nullable=false)
    public Long userTotalComments = 0L;
    @Column(name="userTotalUploadedVideos", nullable=false)
    public Long userTotalUploadedVideos = 0L;

    public Long userTownID;


    public Long userID;
    public UserMeta() {}
    public UserMeta(Long userid) {
        this.userBio = "El usuario no ha escrito nada todavia!";
        this.userDescription = "El usuario todavia no se ha describido!";
        this.userID = userid;

    }
    public Long getUserTownID() {
        return userTownID;
    }

    public void setUserTownID(Long userTownID) {
        this.userTownID = userTownID;
    }
}
public class Pass {

    protected String hashed;
    protected String userHash;

    public Pass(String passwordToHash, String salt) {

        StringBuffer passSalt = new StringBuffer(passwordToHash);
        this.userHash = DigestUtils.md5Hex(salt);
        passSalt.append(this.userHash);
        passSalt.append(Play.configuration.getProperty("application.passwordSalt"));

        this.hashed = DigestUtils.sha512Hex(passSalt.toString());

    }
    public String getHashedPassword() {
        return this.hashed;
    }
    public String getUserHash() {

        return this.userHash;
    }