Hazırda bekletme: varlık ile kimliği al


29

Kullanıcı varlığım var ve kimliğinden tabana geçmeye çalışıyorum. Varlık tanımı aşağıdadır.

package com.hibernate.logic; 

import java.io.Serializable; 
import java.util.Random; 

import javax.persistence.*; 

@Entity 
@Table(name="users") 
public class User implements Serializable { 
    private static final long serialVersionUID = 1L; 

@Id 
@Column(name="user_id") 
private Long userId; 

@Column(name="middlename") 
private String middlename; 

@Column(name="name") 
private String name; 

@Column(name="surname") 
private String surname; 

@Column(name="pass") 
private String pass; 

//bi-directional many-to-one association to Role 
@ManyToOne 
@JoinColumn(name="role_id") 
private Role role; 

public User() { 
    Random random = new Random(); 
    this.userId = random.nextLong(); 
    this.name = ""; 
    this.surname = ""; 
    this.middlename = ""; 
} 

public Long getUserId() { 
    return this.userId; 
} 

public void setUserId(Long userId) { 
    this.userId = userId; 
} 

public String getMiddlename() { 
    return this.middlename; 
} 

public void setMiddlename(String middlename) { 
    this.middlename = middlename; 
} 

public String getName() { 
    return this.name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getSurname() { 
    return this.surname; 
} 

public void setSurname(String surname) { 
    this.surname = surname; 
} 

public Role getRole() { 
    return this.role; 
} 

public void setRole(Role role) { 
    this.role = role; 
} 

public String getPass() { 
    return pass; 
} 

public void setPass(String pass) { 
    this.pass = pass; 
} 

} 

Yani yöntem getUserById (Uzun user_id) sadece kullanıcı kurucusunu çağırmak oluyor, veritabanından bilgi almaz. Neden böyle?

public User getUserById(Long user_id) { 
     Session session = null; 
     User user = null; 
     try { 
      session = HibernateUtil.getSessionFactory().openSession(); 
      user = session.load(User.class, 
        user_id); 
      Hibernate.initialize(user); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (session != null && session.isOpen()) { 
       session.close(); 
      } 
     } 
     return user; 
    } 
  0

niçin user1, return (User) user1; 18 haz. 122012-06-18 19:23:34

44

kullanım get yerine EntityManager em kullanma load

// ... 
     try { 
      session = HibernateUtil.getSessionFactory().openSession(); 
      user = (User) session.get(User.class, user_id); 
     } catch (Exception e) { 
// ... 
  0

çok fazla, işe yarıyor. Ama aralarındaki farkı tarif edebilir misin? Neden eğitmen arandı? 19 haz. 122012-06-19 14:22:30

+1

Burada ayrıntılı olarak http://stackoverflow.com/a/608979/1143825 19 haz. 122012-06-19 14:41:34

  0

Merhaba Ilya olsun, get (sınıf, parametre), parametre herhangi bir sütun olabilir mi, yoksa sadece birincil anahtar mı? 19 oca. 182018-01-19 19:37:41


4

getUserById size kullanılmaz yeni bir nesne (kullanici1) oluşturmamalıdır. Sadece zaten (ama sıfır) başlatılan user için atayın. Aksi Hibernate.initialize(user); İşte aslında Hibernate.initialize(null);

yeni getUserById (bu test etmedim;) var):

public User getUserById(Long user_id) { 
    Session session = null; 
    Object user = null; 
    try { 
     session = HibernateUtil.getSessionFactory().openSession(); 
     user = (User)session.load(User.class, user_id); 
     Hibernate.initialize(user); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     if (session != null && session.isOpen()) { 
      session.close(); 
     } 
    } 
    return user; 
} 
  0

Üzgünüm, aslında haklısın, ben user1 ile karıştırılmıştım. Ama problemi çözmez. Kullanıcıyı veritabanından almaya çalıştığımda hala kurucuyu çağırıyor. 19 haz. 122012-06-19 14:02:26


0

;

public User getUserById(Long id) { 
    return em.getReference(User.class, id); 
}