2017-08-12 17 views
-1

私のmysqlデータベースには、 "User"と "Email"という2つのテーブルがあります。 「email_id」の列は、「User」という表のという外部キーです。Hibernate - 主キーと外部キーを使用して2つのエンティティに基づくオブジェクトを返す

は私がユーザー表で提供IDに基づいて電子メールアドレスを持つユーザーのすべての詳細を含む、オブジェクトを返すために休止状態JPAを使用します。

以下は、my tables構造のスクリーンショットです。

ユーザー

Table User

メール:ここenter image description here

は私のJavaのエンティティクラスです:

のClお尻のユーザー

package com.concretepage.entity; 

import java.io.Serializable; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name = "user") 
public class User implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name = "user_id") 
    private int user_id; 
    @Column(name = "email_id") 
    private int email_id; 
    @Column(name = "user_name") 
    private String user_name; 

    public User() { 
    } 

    public User(int user_id, int email_id, String user_name) { 
     this.user_id = user_id; 
     this.email_id = email_id; 
     this.user_name = user_name; 
    } 

    public int getUser_id() { 
     return user_id; 
    } 

    public void setUser_id(int user_id) { 
     this.user_id = user_id; 
    } 

    public int getEmail_id() { 
     return email_id; 
    } 

    public void setEmail_id(int email_id) { 
     this.email_id = email_id; 
    } 

    public String getUser_name() { 
     return user_name; 
    } 

    public void setUser_name(String user_name) { 
     this.user_name = user_name; 
    } 
} 

クラスメールのメソッドを定義するための

package com.concretepage.entity; 

import java.io.Serializable; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name = "email") 
public class Email implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name = "email_id") 
    private int email_id; 
    @Column(name = "email_address") 
    private String email_address; 

    public Email() { 
    } 

    public Email(int email_id, String email_address) { 
     this.email_id = email_id; 
     this.email_address = email_address; 
    } 

    public int getEmail_id() { 
     return email_id; 
    } 

    public void setEmail_id(int email_id) { 
     this.email_id = email_id; 
    } 

    public String getEmail_address() { 
     return email_address; 
    } 

    public void setEmail_address(String email_address) { 
     this.email_address = email_address; 
    } 
} 

インタフェースユーザー

package com.concretepage.dao; 
import java.util.List; 
import com.concretepage.entity.*; 

public interface IUserDAO { 
    List<User> getAllUser(); 
    User getUserBy(int userId); 
} 

インタフェースメソッドを定義するための電子メール

package com.concretepage.dao; 
import java.util.List; 
import com.concretepage.entity.*; 

public interface IEmailDAO { 
    List<Email> getAllEmails(); 
    Email getEmailById(int emailId); 
} 

実装インタフェースのユーザーサービスを呼び出すための

package com.concretepage.dao; 
import java.util.List; 

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

import org.springframework.stereotype.Repository; 
import org.springframework.transaction.annotation.Transactional; 

import com.concretepage.entity.*; 
@Transactional 
@Repository 
public class UserDAO implements IUserDAO { 

    @PersistenceContext 
    private EntityManager entityManager; 

    @Override 
    public List<User> getAllUser() { 
     String hql = "FROM User as user ORDER BY user.user_id"; 
     return (List<User>) entityManager.createQuery(hql).getResultList(); 
    } 

    @Override 
    public User getUserBy(int userId) { 
     return entityManager.find(User.class, userId); 
    } 
} 

実装インタフェースのメール

package com.concretepage.dao; 

import java.util.List; 

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

import org.springframework.stereotype.Repository; 
import org.springframework.transaction.annotation.Transactional; 

import com.concretepage.entity.*; 

@Transactional 
@Repository 
public class EmailDAO implements IEmailDAO { 

    @PersistenceContext 
    private EntityManager entityManager; 

    @Override 
    public List<Email> getAllEmails() { 
     String hql = "FROM Email as email ORDER by email.email_id"; 
     return (List<Email>) entityManager.createQuery(hql).getResultList(); 
    } 

    @Override 
    public Email getEmailById(int emailId) { 
     return entityManager.find(Email.class, emailId); 
    } 

} 

Controllerクラス

Id = 1のユーザーのメールアドレスに彼の名前が必要です。 enter image description here

+0

何かが外部キーである場合、それが表すフィールドにRELATION(たとえば、@ OneToOne)が必要です。どのようなJPAドキュメントでも、どのように伝えるでしょうか。 –

+0

どこに@OneToOne関係を置いていますか?あなたは例を教えてください。 JPAドキュメントをチェックインしましたが、実装できませんでした。 – Shaam

+0

"がJPAドキュメントの" ... right "でチェックされています。これらのようなもの? http://www.datanucleus.org/products/accessplatform_5_1/jpa/mapping.html#one_one_relationsどのようにそれを行うには簡単です –

答えて

関連する問題