Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 尝试从实体获取自动生成的id时获取null,该实体是通过使用JPARepository的findByVariable方法获取的_Java_Hibernate_Spring Mvc_Spring Data Jpa - Fatal编程技术网

Java 尝试从实体获取自动生成的id时获取null,该实体是通过使用JPARepository的findByVariable方法获取的

Java 尝试从实体获取自动生成的id时获取null,该实体是通过使用JPARepository的findByVariable方法获取的,java,hibernate,spring-mvc,spring-data-jpa,Java,Hibernate,Spring Mvc,Spring Data Jpa,我有这个模型: User.java @Entity @Table(name = "`user`") public class User { private Long id; private String username; private String phone; @Override public int hashCode() { return new Long(id).hashCode(); } @Override

我有这个模型:

User.java

@Entity
@Table(name = "`user`")
public class User {
    private Long id;
    private String username;
    private String phone;

    @Override
    public int hashCode() {
        return new Long(id).hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (!(obj instanceof User)) {
            return false;
        }
        return this.id == ((User) obj).getId();
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }

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

    (...other getters and setters...)

}
(...)

@RequestMapping(value = "/user/updatePhone", method = RequestMethod.GET)
public String updatePhone(Model model) {
    model.addAttribute("userForm", userService.findByUsername("testUsername"));
    return "user/updatePhone";
}

@RequestMapping(value = "/user/updatePhone", method = RequestMethod.POST)
public String updatePhone(@ModelAttribute("userForm") User userForm, BindingResult bindingResult, Model model) {
    userService.updatePhone(userForm);
    return "redirect:/user/view";
}

(...)
@Service
@Transactional
public class UserServiceImpl implements UserService {

    (...)

    @Override
    public void updatePhone(User user) {
        User entity = userRepository.findById(user.getId());
        if (entity != null) {
            entity.setPhone(user.getPhone());
        }
    }

    (...)

}
我的控制器中的这段代码:

UserController.java

@Entity
@Table(name = "`user`")
public class User {
    private Long id;
    private String username;
    private String phone;

    @Override
    public int hashCode() {
        return new Long(id).hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (!(obj instanceof User)) {
            return false;
        }
        return this.id == ((User) obj).getId();
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }

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

    (...other getters and setters...)

}
(...)

@RequestMapping(value = "/user/updatePhone", method = RequestMethod.GET)
public String updatePhone(Model model) {
    model.addAttribute("userForm", userService.findByUsername("testUsername"));
    return "user/updatePhone";
}

@RequestMapping(value = "/user/updatePhone", method = RequestMethod.POST)
public String updatePhone(@ModelAttribute("userForm") User userForm, BindingResult bindingResult, Model model) {
    userService.updatePhone(userForm);
    return "redirect:/user/view";
}

(...)
@Service
@Transactional
public class UserServiceImpl implements UserService {

    (...)

    @Override
    public void updatePhone(User user) {
        User entity = userRepository.findById(user.getId());
        if (entity != null) {
            entity.setPhone(user.getPhone());
        }
    }

    (...)

}
在我的服务中:

UserServiceImpl.java

@Entity
@Table(name = "`user`")
public class User {
    private Long id;
    private String username;
    private String phone;

    @Override
    public int hashCode() {
        return new Long(id).hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (!(obj instanceof User)) {
            return false;
        }
        return this.id == ((User) obj).getId();
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }

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

    (...other getters and setters...)

}
(...)

@RequestMapping(value = "/user/updatePhone", method = RequestMethod.GET)
public String updatePhone(Model model) {
    model.addAttribute("userForm", userService.findByUsername("testUsername"));
    return "user/updatePhone";
}

@RequestMapping(value = "/user/updatePhone", method = RequestMethod.POST)
public String updatePhone(@ModelAttribute("userForm") User userForm, BindingResult bindingResult, Model model) {
    userService.updatePhone(userForm);
    return "redirect:/user/view";
}

(...)
@Service
@Transactional
public class UserServiceImpl implements UserService {

    (...)

    @Override
    public void updatePhone(User user) {
        User entity = userRepository.findById(user.getId());
        if (entity != null) {
            entity.setPhone(user.getPhone());
        }
    }

    (...)

}

我的问题是,当我试图从UserServiceImpl类中的用户对象获取id时,得到的是null。你知道我必须做什么才能在我的用户对象中正确设置id吗?可能是userRepository类的findByUsername(…)方法有问题,该方法返回的对象没有id(这是我的模型中@id和@GeneratedValue(…)注释的前奏)。

表单中有id吗?@JalalSordo:我不完全理解你的问题。你是说它使用的语言吗?通常,在我的应用程序中,我以类似的方式使用JPA存储库来创建/更新/删除数据库中的记录,一切正常。我对这个具体的例子有问题。@ChiefTwoPencils:我在表单中没有使用id-我在表单中只有一个用于更改phone变量的输入。我确信包括id在内的完整用户会在返回时与用户一起返回,对吗?这篇文章的内容是什么?我对sqlserver2008也有类似的问题,请尝试GenerationType.IDENTITY。