Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC-在控制器中默认设置值_Java_Spring_Spring Mvc - Fatal编程技术网

Java Spring MVC-在控制器中默认设置值

Java Spring MVC-在控制器中默认设置值,java,spring,spring-mvc,Java,Spring,Spring Mvc,根据以下映射(在问题的底部),我需要知道如何在Employee类中的“department\u id”中设置特定值 Employee -------------------------------------------- id | firstname | lastname | department_id -------------------------------------------- 1 | David | Smith | 1

根据以下映射(在问题的底部),我需要知道如何在Employee类中的“department\u id”中设置特定值

Employee             
--------------------------------------------
id  | firstname  | lastname | department_id
--------------------------------------------
1   | David      | Smith    |     1 


Department              
-----------
id  | name
-----------
1   | Dep A
2   | Dep B
3   | Dep C
saveEmployee方法(EmployeeController类):

@RequestMapping(value = "/saveEmployee", method = RequestMethod.POST)
public String saveEmployee(@ModelAttribute("employee") Employee employee){
    /*  I need to set the department "id" (foreign key) into the Employee
table directly in this method. */
    int id = 1; // 2 or 3...
    /* The "department_id" in the Employee class should 
       to receive the "id" value. */
    employee.setDepartment(id); // It does not work.
    employeeService.saveEmployee(employee);
    return "redirect:/employees";
}
@Entity
public class Employee{
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    private String firstname;
    private String lastname;

    @ManyToOne
    @JoinColumn(name = "department_id")
    private Department department;
    // Getters and Setters
}
@Entity
public class Department{
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    private String name;
    // Getters and Setters
}
员工类别:

@RequestMapping(value = "/saveEmployee", method = RequestMethod.POST)
public String saveEmployee(@ModelAttribute("employee") Employee employee){
    /*  I need to set the department "id" (foreign key) into the Employee
table directly in this method. */
    int id = 1; // 2 or 3...
    /* The "department_id" in the Employee class should 
       to receive the "id" value. */
    employee.setDepartment(id); // It does not work.
    employeeService.saveEmployee(employee);
    return "redirect:/employees";
}
@Entity
public class Employee{
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    private String firstname;
    private String lastname;

    @ManyToOne
    @JoinColumn(name = "department_id")
    private Department department;
    // Getters and Setters
}
@Entity
public class Department{
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    private String name;
    // Getters and Setters
}
系级:

@RequestMapping(value = "/saveEmployee", method = RequestMethod.POST)
public String saveEmployee(@ModelAttribute("employee") Employee employee){
    /*  I need to set the department "id" (foreign key) into the Employee
table directly in this method. */
    int id = 1; // 2 or 3...
    /* The "department_id" in the Employee class should 
       to receive the "id" value. */
    employee.setDepartment(id); // It does not work.
    employeeService.saveEmployee(employee);
    return "redirect:/employees";
}
@Entity
public class Employee{
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    private String firstname;
    private String lastname;

    @ManyToOne
    @JoinColumn(name = "department_id")
    private Department department;
    // Getters and Setters
}
@Entity
public class Department{
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    private String name;
    // Getters and Setters
}

实际上,您的setDepartment接收到一个Department实例。所以你必须这样做:

int id = 1; 
Department department = new Department(); //Or you can use Autowired
department.setId(id); // Set Id Department
employee.setDepartment(department); // A Department instance
employeeService.saveEmployee(employee);
return "redirect:/employees";

仔细查看您的
员工
班级:

@Entity
public class Employee{
    ...

    @ManyToOne
    @JoinColumn(name = "department_id")
    private Department department;
    /* THIS IS NOT AN INTEGER DATA TYPE, IT'S A DEPARTMENT DATA TYPE. 
    SO THE SETTER FOR THIS WILL LOOK SOMEWHAT LIKE THIS:*/

    //Setter
    public void setDepartment(Department department) {
        this.department = department
    }

    ...
    // Getters and Setters
}
要设置
部门
请创建您的
部门
的实例,然后通过setter发送:

@RequestMapping(value = "/saveEmployee", method = RequestMethod.POST)
public String saveEmployee(@ModelAttribute("employee") Employee employee){
    int id = 1; // 2 or 3...

    Department temporaryDepartment = new Department();
    temporaryDepartment.setId(id);

    employee.setDepartment(temporaryDepartment); 
    employeeService.saveEmployee(employee);
    return "redirect:/employees";
}

实际上,您已经设置了如下所示的生成策略

@Id
    @GeneratedValue(strategy=GenerationType.AUTO) 
Department
类上,这意味着您希望hibernate为您生成id,这样您就不必担心设置部门id。您只需要设置部门名称

下面是工作代码,
JPAEmployeeTest.java

package com.chatar.hibernate.receipes.example;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.chatar.hibernate.receipes.example.domain.annotations.Department;
import com.chatar.hibernate.receipes.example.domain.annotations.Employee;

public class JPAEmployeeTest {

    public static void main(String[] args) {
        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory( "employee" );

        EntityManager entityManager = entityManagerFactory.createEntityManager();
        entityManager.getTransaction().begin();

        Employee employee = new Employee();
        Department department = new Department();
        department.setName("Engineering");

        employee.setFirstName("Johny");
        employee.setLastName("Walker");
        employee.setDepartment(department);

        entityManager.persist(employee);

        entityManager.getTransaction().commit();

        entityManager.close();

    }
}
和我的域对象,
Employee.java

package com.chatar.hibernate.receipes.example.domain.annotations;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class Employee implements Serializable {

    private static final long serialVersionUID = -5641563180459243167L;

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private long id;

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

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

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name = "department_id" )
    private Department department;

    public long getId() {
        return id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Department getDepartment() {
        return department;
    }

    public void setDepartment(Department department) {
        this.department = department;
    }
}
package com.chatar.hibernate.receipes.example.domain.annotations;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Department implements Serializable {

    private static final long serialVersionUID = -598469568850009702L;
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private long id;
    private String name;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

package com.chatar.hibernate.receipes.example.domain.annotations;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class Employee implements Serializable {

    private static final long serialVersionUID = -5641563180459243167L;

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private long id;

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

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

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name = "department_id" )
    private Department department;

    public long getId() {
        return id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Department getDepartment() {
        return department;
    }

    public void setDepartment(Department department) {
        this.department = department;
    }
}
package com.chatar.hibernate.receipes.example.domain.annotations;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Department implements Serializable {

    private static final long serialVersionUID = -598469568850009702L;
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private long id;
    private String name;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation=
   "http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
   version="1.0">

   <persistence-unit name="employee" transaction-type="RESOURCE_LOCAL">
                             <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <class>com.chatar.hibernate.receipes.example.domain.annotations.Employee</class>
      <class>com.chatar.hibernate.receipes.example.domain.annotations.Department</class>

      <properties>
       <property name="javax.persistence.jdbc.driver"
            value = "org.apache.derby.jdbc.EmbeddedDriver"/>
        <property name="javax.persistence.jdbc.url" value = "jdbc:derby://localhost:1527/BookShopDB" />
        <property name="javax.persistence.jdbc.user" value="book" />
        <property name="javax.persistence.jdbc.password" value = "book" />
        <property name="hibernate.dialect" value = "org.hibernate.dialect.DerbyDialect" />
     </properties>

   </persistence-unit>
</persistence>
注意-我使用的是
GenerationType.TABLE
,因为
AUTO
不适用于我的数据库,即
Debry
。此外,我还设置了
CascadeType.ALL
,这样当我保存
Employee
实体时,Hibernate会保存所有引用实体,例如我的案例中的
Department