Вопрос об отношениях в спящем режиме - PullRequest
0 голосов
/ 07 ноября 2010

Я изучаю Hibernate и Play Framework (также добавляю 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;

        }

Это мой код при регистрации пользователя

        // check if the validation has errors
        if(validation.hasErrors()) {
          params.flash(); // add http parameters to the flash scope
          validation.keep(); // keep the errors for the next request
          register();
        } else {
                Cache.delete(uuid);
                Pass pass = new Pass(password,new Date().toString());
                User newUser = new User(firstName, pass, email);
                UserMeta utest = new UserMeta(newUser.id);
                utest.setUserTownID(pueblos);
                newUser.setUserMeta(utest);
                newUser.save();
                Logger.info("NewUser ID : %s", newUser.getId());
//                UserMeta userInfo = new UserMeta(newUser.getId());
//                userInfo.setUserTownID(pueblos);
//                userInfo.save();

                // TODO salvar foto a null

                // Confirmation left
                Cache.set("thankyou", "alright!", "3mn");
                thankyou();
        }

Я пытаюсь сохранить userMeta, он создает новую запись, когда я устанавливаю объект userMeta в newUser (прямо сейчас не видно), но не вставляет новый идентификатор, созданный в newUser.

Какие отношения мне нужны? до того, как я настроил код, как сейчас, это были отношения OneToOne, они работали довольно хорошо, но теперь, когда я завершал функции регистра, мне показалось, что мне нужно было также сохранить объект userMeta ..

Если вам нужна дополнительная информация, дайте мне знать, я не знаю, хорошо ли я это объяснил или нет, просто пытаюсь понять, как Hibernate взаимодействует и т. Д.

Добавление пользовательской меты:

* /

@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;
    }  

} * * тысяча двадцать-один

1 Ответ

1 голос
/ 08 ноября 2010

Там, кажется, много чего происходит!Но из того, что я могу сказать, ваша проблема с идентификатором, который вы передаете в UserMeta.

Когда вы расширяете Model, идентификатор генерируется классом Model.Однако это не устанавливается до тех пор, пока объект не будет сохранен в базе данных (поскольку идентификатор автоматически генерируется базой данных).

Следовательно, поскольку вы передаете идентификатор в UserMeta до того, как объект User будетсохранено, значение id будет нулевым.

Если вы можете сохранить объект User до создания объекта UserMeta, ваш код должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...