java - 我应该如何指定托管 bean 方法来保存定向外键上的数据?

标签 java mysql hibernate

我目前刚开始使用 JSF 规范做网站项目。众所周知,JSF 应该包含服务器页面的 xhtml 和托管 bean 来确定类方法,并且我已经在我的项目和 MySQL localhost 之间建立了连接。

问题是,我为用户类别创建了 1 个主表,其中包括姓名、性别等常见属性,并且我创建了另外两个表来指定用户的角色。问题是,包含 user_ID 作为主键的主 User 表成为其他 2 个表外键的引用,例如:学生、员工。

如果我在服务器页面上创建了一个注册表单,我应该如何确定将数据分离到数据库中的方法,以免进入错误的表?

LoginBean.Java

private String fullName_;
private String gender_;
private String phoneNumber_;
private String IC_;
private String email_;
private String Address_;
private String password_;

public String getFullName_() {
    return fullName_;
}

public void setFullName_(String fullName_) {
    this.fullName_ = fullName_;
}

public String getGender_() {
    return gender_;
}

public void setGender_(String gender_) {
    this.gender_ = gender_;
}

public String getPhoneNumber_() {
    return phoneNumber_;
}

public void setPhoneNumber_(String phoneNumber_) {
    this.phoneNumber_ = phoneNumber_;
}

public String getIC_() {
    return IC_;
}

public void setIC_(String IC_) {
    this.IC_ = IC_;
}

public String getEmail_() {
    return email_;
}

public void setEmail_(String email_) {
    this.email_ = email_;
}

public String getAddress_() {
    return Address_;
}

public void setAddress_(String Address_) {
    this.Address_ = Address_;
}

public String getPassword_() {
    return password_;
}

public void setPassword_(String password_) {
    this.password_ = password_;
}



public String saveUser(LoginBean loginBean){
    UserDao dao = new UserDao(); //METODE SIMPAN KE DATABASE!!!
    User user = new User();
    user.setFullName(loginBean.getFullName_());
    user.setGender(loginBean.getGender_());
    user.setPhoneNumber(Integer.parseInt(loginBean.getPhoneNumber_()));
    user.setIc(loginBean.getIC_());
    user.setEmail(loginBean.getEmail_());
    user.setPassword(loginBean.getPassword_());
    dao.saveStudent(user);//untuk menyimpan di database
    Map<String,Object> sessionMapObj = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
        sessionMapObj.put("msg", "Data "+user.getIc() +"successfull!");
    return"/sukses.xhtml?faces-redirect=true";  
}

用户.java

 private Integer userId;
 private String fullName;
 private String gender;
 private Integer phoneNumber;
 private String ic;
 private String email;
 private String address;
 private String password;
 private Set students = new HashSet(0);
 private Set staffs = new HashSet(0);

public User() {
}

public User(String fullName, String gender, Integer phoneNumber, String ic, String email, String address, String password, Set students, Set staffs) {
   this.fullName = fullName;
   this.gender = gender;
   this.phoneNumber = phoneNumber;
   this.ic = ic;
   this.email = email;
   this.address = address;
   this.password = password;
   this.students = students;
   this.staffs = staffs;
}

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

public void setUserId(Integer userId) {
    this.userId = userId;
}
public String getFullName() {
    return this.fullName;
}

public void setFullName(String fullName) {
    this.fullName = fullName;
}
public String getGender() {
    return this.gender;
}

public void setGender(String gender) {
    this.gender = gender;
}
public Integer getPhoneNumber() {
    return this.phoneNumber;
}

public void setPhoneNumber(Integer phoneNumber) {
    this.phoneNumber = phoneNumber;
}
public String getIc() {
    return this.ic;
}

public void setIc(String ic) {
    this.ic = ic;
}
public String getEmail() {
    return this.email;
}

public void setEmail(String email) {
    this.email = email;
}
public String getAddress() {
    return this.address;
}

public void setAddress(String address) {
    this.address = address;
}
public String getPassword() {
    return this.password;
}

public void setPassword(String password) {
    this.password = password;
}
public Set getStudents() {
    return this.students;
}

public void setStudents(Set students) {
    this.students = students;
}
public Set getStaffs() {
    return this.staffs;
}

public void setStaffs(Set staffs) {
    this.staffs = staffs;
}

最佳答案

我想您想看看 jdbc。 Java 数据库连接允许您在 java 中创建 sql 查询。然而,Java EE 应用程序中经常使用 Java Persistence API (JPA)。这是关于如何从数据库存储和检索 Java 对象的规范。一个非常常见的实现是 hibernate 框架。

如果您想为 jsf 项目启用 Hibernate 功能,请遵循以下指南: https://howtodoinjava.com/hibernate/hibernate-3-introduction-and-writing-hello-world-application/ 。如果您的项目不是使用 Maven 构建的,请忽略本教程的这一部分。

例如使用 hibernate 。您可以创建一个用户实体。您可以按照这个简单的教程来了解如何创建实体:https://www.baeldung.com/jpa-entities

现在假设您不想使用其中任何一个,而只想使用 jdbc 的默认解决方案:

import java.sql.*;


public class Userdao
{

  public static void saveUser(User user)
  {
    try
    {
      value1 = user.getId();
      value2 = user.getFirstName();
      value3 = user.getLastName();
      String myUrl = "jdbc:somesql:localhost/test";
      //now we load the driver
      Class.forName("oracle.jdbc.driver.OracleDriver");  //download the correct driver of your database and add as library to your project
      Connection conn = DriverManager.getConnection(myUrl, "root", "");

      // our SQL SELECT query. 
      // if you only need a few columns, specify them by name instead of using "*"

      String addUserQuery = "INSERT INTO table_name (column1, column2, column3, ...) VALUES (" + value1 + ", " + value2 + ", " + value3, + "...);" //column1 could be Userid-Primarykey, 2 Name ...

      Statement addSt = conn.createStatement();
      addSt.executeQuery(addUserQuery)

      // create the java statement for retrieving

      String query = "SELECT + from table_name";
      Statement st = conn.createStatement();

      // execute the query, and get a java resultset
      ResultSet rs = st.executeQuery(query);

      // iterate through the java resultset
      while (rs.next())
      {
        int id = rs.getInt("id");
        String firstName = rs.getString("first_name"); //first_name being the column name
        String lastName = rs.getString("last_name");


        // print the Name
        System.out.format("%s, %s\n", id, firstName, lastName);
      }
      st.close();
    }
    catch (Exception e)
    {
      System.err.println("Got an exception! ");
      System.err.println(e.getMessage());
    }
  }
}

外键引用是在数据库中处理的,所以对于。例如。如果您想获取子对象,您只需要一个连接表的查询,然后从结果集中提取相应的值。

关于java - 我应该如何指定托管 bean 方法来保存定向外键上的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60611655/

相关文章:

java - 无法使用 Apache commons-net-3.1 在 FTP 上上传大文件

java - 如何解决 Struts2 与 Hibernate 中的 "java.lang.NoClassDefFoundError: org/hibernate/util/IdentitySet"错误?

java - 双向 JPA OneToMany/ManyToOne 关联中的 “the inverse side of the association” 是什么?

hibernate - 如何将ID映射到Grails中的其他列?

Java:Heroku 项目中的 Json

java - JDesktopPane 放置

php - 复制php资源

php - 为整个数据库导入单个 MySQL .sql 文件 |未选择数据库错误

c# - 从MySql中选择年龄并将其显示在Chart控件中

java - Hibernate/persistence 有哪些常见问题?