2015-05-13 1 views
2

Привет Я пытаюсь реализовать ebeans индивидуальное сопоставление с ebeans с данными пользователя и user_profile. Я выполнил маркировку аннотаций с каждым ключом, но не смог вставить значение во время выполнения.Вставить значение в одну к одной аннотации сопоставления с использованием ebeans или hibernate

UserProfile.java

@Entity 
public class UserProfile extends Model{ 

    @Id 
    public Long userProfileId; 

    public String empId; 
    public String name; 
    public String emailId; 

    @OneToOne 
    @JoinColumn(name = "email") 
    public User user; 

    //inserting filled form into database 
    public static Long create(UserProfile userProfile) 
    { 
     //save leave into database 
     userProfile.save(); 
     return userProfile.serial_id; 
    } 

User.java

@Entity 
public class User extends Model { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    public static Finder<String, User> find = new Finder<String, User>(String.class, User.class); 


    @Id 
    public String email; 
    public String name; 
    public String password; 
    public String permission; 
    public int userProfileId; 

    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch= FetchType.LAZY) 
    public UserProfile profile; 

    public User(long id,String email, String name, String password,String permission, 
       int user_id) { 
     //this.id=id; 
     this.email = email; 
     this.name = name; 
     this.password = password; 
     this.permission = permission; 
     this.user_id = user_id; 
    } 

Я хочу, чтобы вставить профиль_пользователя userprofile_id таблицы в userProfileId пользователя.

ответ

1

Попробуйте следующее:

@Entity 
public class UserProfile extends Model{ 

    @Id 
    public Long userProfileId; 

    public String empId; 
    public String name;  

    @OneToOne 
    public User user; 

    //inserting filled form into database 
    public static Long create(UserProfile userProfile) 
    { 
     //save leave into database 
     userProfile.save(); 
     return userProfile.serial_id; 
    } 
@Entity 
public class User extends Model { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    public static Finder<String, User> find = new Finder<String, User>(String.class, User.class); 


    @Id 
    public String email; 
    public String name; 
    public String password; 
    public String permission; 

    @OneToOne(cascade = CascadeType.ALL, fetch= FetchType.LAZY) 
    public UserProfile profile; 

    public User(long id,String email, String name, String password,String permission, 
       int user_id, UserProfile profileIn) { 
     //this.id=id; 
     this.email = email; 
     this.name = name; 
     this.password = password; 
     this.permission = permission; 
     this.user_id = user_id; 
     this.profile = profileIn; 
    } 

Разница заключается в том, что вам не нужно emailId в UserProfile сущности и userProfileId в User сущности. Просто используйте экземпляр сущности, и спящий режим выполнит свою работу. Если вам вообще нужно подвергать userProfileId в User лица, чтобы услуги доступа только идентификатор затем изменить User класс со следующими изменениями:

@Column(name = "profileId", insertable = false, updatable = false, nullable = false) 
private Long profileId; 

@OneToOne(cascade = CascadeType.ALL, fetch= FetchType.LAZY, nullable = false) 
@JoinColumn(name = "profileId") 
private UserProfile profile; 

Последнее, но не менее, пожалуйста, не подвергайте свойства, как вы сделали в ваших классах. Сделайте их частными и внедрите методы getter/setter.

+0

Я хочу, чтобы когда-либо пользователь вставлял в userprofile таблицу, идентификатор userprofile автоматически вставляется в пользователя. это возможно? – user

+0

Да его возможно. После сохранения объекта UserProfile просто вызовите entityManager.refresh() на свой экземпляр объекта пользователя, и вы получите обновленный экземпляр пользователя с идентификатором профиля. Если это так, я бы предпочел удалить UserProfile из конструктора сущности пользователя, добавить параметр User as constructor для класса UserProfile и добавить метод getter для UserProfile в классе User. Пожалуйста, не забудьте проголосовать за мой ответ, если это поможет вам любым возможным способом. Благодаря! –

+0

при вставке Я получаю сообщение об ошибке «ERROR выполняет DML bindLog [] error [Column 'profileId' не может быть null] 'вы можете мне помочь. – user