私のmysqlデータベースには、 "User"と "Email"という2つのテーブルがあります。 「email_id」の列は、「User」という表のという外部キーです。Hibernate - 主キーと外部キーを使用して2つのエンティティに基づくオブジェクトを返す
は私がユーザー表で提供IDに基づいて電子メールアドレスを持つユーザーのすべての詳細を含む、オブジェクトを返すために休止状態JPAを使用します。
以下は、my tables構造のスクリーンショットです。
表ユーザー:
は私の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のユーザーのメールアドレスに彼の名前が必要です。
何かが外部キーである場合、それが表すフィールドにRELATION(たとえば、@ OneToOne)が必要です。どのようなJPAドキュメントでも、どのように伝えるでしょうか。 –
どこに@OneToOne関係を置いていますか?あなたは例を教えてください。 JPAドキュメントをチェックインしましたが、実装できませんでした。 – Shaam
"がJPAドキュメントの" ... right "でチェックされています。これらのようなもの? http://www.datanucleus.org/products/accessplatform_5_1/jpa/mapping.html#one_one_relationsどのようにそれを行うには簡単です –