【问题标题】:Foreign Key is Null外键为空
【发布时间】:2018-11-21 19:18:51
【问题描述】:

我试图通过jpa在电话簿和用户之间建立关系,当当前登录的用户创建联系人时,表电话簿中用户的外键仍然为空。我在这里检查了几个问题,但对我没有用。

电话簿

@Entity
@Table(name = "Phonebook")
public class Phonebook {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "phonebook_id")
private Long id;

@Column(name = "phone", length = 15, nullable = false)
private String phoneNumber;

@Column(name = "firstname", length = 50, nullable = false)
private String firstName;

@ManyToOne
@JoinColumn(name = "user_id")
private User user;

//getters and setters

用户

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "user_id")
    private Long id;

    @Column(name = "email")
    private String email;

    @Column(name = "password")
    @Length(min = 5, message = "*Your password must have at least 5 characters")
    @org.springframework.data.annotation.Transient
    private String password;

    @OneToMany(mappedBy = "user")
    private List<Phonebook> phonebooks;

//getters and setters

电话簿控制器

    @RequestMapping(value = {"/home/phonebook"}, method = RequestMethod.GET)
        public String showPage(Model model, @RequestParam(defaultValue = "0") int page){
            Authentication auth = SecurityContextHolder.getContext().getAuthentication();
            User user = userService.findUserByEmail(auth.getName());
            model.addAttribute("data",phonebookRepository.findAllByUserId(user.getId(),PageRequest.of(page,10)));
            model.addAttribute("currentPage",page);
            return "/home/phonebook";
        }

    @PostMapping("/home/phonebook/save")
        public String save (Phonebook p){
            phonebookRepository.save(p);

            return "redirect:/home/phonebook";
        }

电话簿存储库

@Repository("phonebookRepository")
public interface PhonebookRepository extends JpaRepository<Phonebook,Integer> {
    List<Phonebook> findAllByUserId(Long id, Pageable pageable);
}

【问题讨论】:

  • 你能贴出创建电话簿联系人的代码吗?
  • 你已经添加了 get 部分,你试图通过 jpa 在电话簿和用户之间建立关系的代码在哪里
  • 我使用来自 JpaRepository 的标准 CRUD

标签: java spring-boot spring-security spring-data-jpa


【解决方案1】:

你必须做什么首先创建一个用户对象并设置 id 然后持久化电话簿。

【讨论】:

    【解决方案2】:

    您必须将PhoneBook 与您的User 保持在一起。

    User u = new User();
    // Set properties for your User...
    PhoneBook p = new PhoneBook();
    // Set properties for your phonebook...
    // Store phone book to user:
    u.setPhoneBook(Collections.singletonList(p));
    userRepository.save(p);
    

    【讨论】:

    • 我需要将它添加到控制器还是服务实现中?
    猜你喜欢
    • 2022-07-29
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多