Невозможно получить данные от объекта в сопоставлении один-к-одному - PullRequest
0 голосов
/ 15 октября 2018

Я реализовал два класса, а именно User.java и UserDetail.java, и я создал сопоставление один к одному между ними, фрагмент:

User.java

@Entity
@Table(name="user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="fname")
private String fname;
@Column(name="sname")
private String sname;
@Column(name="lname")
private String lname;
@Column(name="gender")
private String gender;
@Column(name="dob")
private String dob;
@Column(name="email")
private String email;
@Column(name="phone")
private String phone;
@Column(name="learningcenter")
private String learningcenter;
@Column(name="country")
private String country;
@Column(name="countryoforigin")
private String countryoforigin;

public String getCountryoforigin() {
    return countryoforigin;
}

public void setCountryoforigin(String countryoforigin) {
    this.countryoforigin = countryoforigin;
}

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="user_detail_id")
private UserDetail userDetail;

UserDetail.java

@Entity
@Table(name="user_detail")
public class UserDetail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="first_language")
private String first_language;
@Column(name="second_language")
private String second_language;
@Column(name="levelofenglish")
private String levelofenglish;
@Column(name="levelofenglishyesorno")
private String levelofenglishyesorno;
@Column(name="levelofinternet")
private String levelofinternet;
@Column(name="cos1")
private String cos1;
@Column(name="cos2")
private String cos2;
@Column(name="proof")
private String proof;
@Column(name="yesq")
private String yesq;
@Column(name="certi1")
private String certi1;
@Column(name="employee")
private String employee;
@Column(name="oldornew")
private String oldornew;
@Column(name="vol")
private String vol;
@Column(name="commitments")
private String commitments;
@Column(name="profession")
private String profession;

public String getLevelofenglishyesorno() {
    return levelofenglishyesorno;
}

public void setLevelofenglishyesorno(String levelofenglishyesorno) {
    this.levelofenglishyesorno = levelofenglishyesorno;
}

@Column(name="howuknow")
private String howuknow;
@Column(name="othercomments")
private String othercomments;
@Column(name="expectation")
private String expectation;
@Column(name="status")
private String status;

@OneToOne(mappedBy = "userDetail")
private User user;

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

Я создал все таблицы базы данных и создал страницу register.jsp для получения всего содержимого и передачи контроллеру RegisterController.java

SessionFactory sessionFactory=new Configuration().configure("hibernate.cfg.xml")
                                                        .addAnnotatedClass(User.class)
                                                        .addAnnotatedClass(UserDetail.class).buildSessionFactory();
        Session session=sessionFactory.getCurrentSession();
        boolean flag=false;
        try
        {
           User user=new User(fname.toUpperCase(),sname.toUpperCase(),lname.toUpperCase(),gender,dob,email,phone,learningcenter,country,countryoforigin);
           UserDetail userDetail=new UserDetail(first_language,second_language,levelofenglish,levelofenglishyesorno,levelofinternet,cos1,cos2,
                                                 proof,yesq,certi1,employee,oldornew,vol,commitments,profession,howuknow,othercomments,expectation,"null");
           user.setUserDetail(userDetail);
           session.beginTransaction();
           session.save(user);
           userDetail.setUser(user);
           int id=user.getId();
           System.out.println(id+"is generated");

           List<User> userList=(List<User>)session.createQuery("from User u where u.id=:id")
                                                    .setParameter("id",id).list();
           for(User u:userList)
           {
               System.out.println(u.toString());
               flag=true;

           }
           model.addAttribute("user",user);
           model.addAttribute("userDetail",userDetail);
            session.getTransaction().commit();
           session.close();
        }
        catch (Exception e)
        {
            System.out.println(e);
        }

        if(flag)
        {
            return "success";
        }
        else
        {
            return "failure";
        } 

После выполнения приложенияЯ могу зарегистрировать пользователя, чтобы он отражался в таблицах базы данных.То, что я хочу знать, это получить данные User и UserDetail через код jsp, но я не могу получить содержимое userDetail

<div class="jumbotron text-xs-center">
    <c:forEach var="item" items="${user}">
    <h1 class="display-3">Login Successfull!${item.fname}</h1>
        ${item}
    </c:forEach>
</div> 

в приведенном выше сценарии я могу получить «пользователь», но не «userDetail».Я хочу получить пользовательский, а также userDetail в коде JSP. Пожалуйста, помогите

1 Ответ

0 голосов
/ 15 октября 2018

В вашем коде вы задаете пользовательские и пользовательские детали, которые вы создаете, а не после выборки из базы данных.

 User user=new User(fname.toUpperCase(),sname.toUpperCase(),lname.toUpperCase(),gender,dob,email,phone,learningcenter,country,countryoforigin);
           UserDetail userDetail=new UserDetail(first_language,second_language,levelofenglish,levelofenglishyesorno,levelofinternet,cos1,cos2,
                                                 proof,yesq,certi1,employee,oldornew,vol,commitments,profession,howuknow,othercomments,expectation,"null");
           user.setUserDetail(userDetail);
           session.beginTransaction();
           session.save(user);
           userDetail.setUser(user);
           int id=user.getId();
           System.out.println(id+"is generated");

           List<User> userList=(List<User>)session.createQuery("from User u where u.id=:id")
                                                    .setParameter("id",id).list();
           for(User u:userList)
           {
               System.out.println(u.toString());
               flag=true;

           }
           model.addAttribute("user",user);
           model.addAttribute("userDetail",userDetail);

Проверьте по следующему коду:

<div class="jumbotron text-xs-center">
    <c:forEach var="item" items="${user}">
    <h1 class="display-3">Login Successfull!${item.userDetail}</h1>
        ${item}
    </c:forEach>
</div> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...