【发布时间】:2017-08-12 10:27:02
【问题描述】:
在我的 mysql 数据库中,我有两个表“用户”和“电子邮件”。 “email_id”列是“用户”表中的外键。
我想使用 hibernate JPA 返回一个 Object,其中包含用户的所有详细信息及其电子邮件地址,基于 中提供的 id用户表。
下面是我的表格结构的屏幕截图。
表用户:
表格电子邮件:
这是我的 java 实体类:
班级用户
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);
}
}
调用服务的控制器类
package com.concretepage.controller;
import com.concretepage.dao.IUserDAO;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import com.concretepage.entity.*;
@Controller
@RequestMapping("user")
public class UserController {
@Autowired
private IUserDAO userService;
@GetMapping("users")
public ResponseEntity<List<User>> getAllUser() {
List<User> list = userService.getAllUser();
return new ResponseEntity<>(list, HttpStatus.OK);
}
@GetMapping("users/{id}")
public ResponseEntity<User> getUserBy(@PathVariable("id") Integer id) {
User user = userService.getUserBy(id);
return new ResponseEntity<>(user, HttpStatus.OK);
}
}
我需要 ID = 1 的用户的电子邮件地址和他的姓名。
【问题讨论】:
-
如果某物是外键,那么您需要在它所代表的字段上使用 RELATION(例如
@OneToOne)。任何 JPA 文档都会告诉您如何操作。 -
我将@OneToOne 关系放在哪里?你能举个例子吗。签入 JPA 文档,但无法实现。
-
"检查了 JPA 文档" ... 对。像这样的? datanucleus.org/products/accessplatform_5_1/jpa/… 因为它足够简单怎么做
-
文档没有显示如何实现该方法
-
关心与世界分享什么是“方法”?链接的页面告诉您如何在 JPA 中实现 1-1 关系,这在您的帖子中没有做过。
标签: hibernate jpa spring-boot persistence