简体   繁体   中英

Why Doesn't jpa add data to the foreign key value

I have a users table which contains the user details. i also have a authorities table which has the role of a user. The user and authorities table has one to many mapping. When i try to save the details using Jpa the foreign key column is blank no data is inserted in that field. i have a form in which i am specifying the role of the user along with other details.

package com.example.StarsProject.Model;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;

@Entity
@Table
@Getter
@Setter
public class Authorities {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String role;
    @ManyToOne(cascade = CascadeType.PERSIST,fetch=FetchType.EAGER)
    @JoinColumn(name = "users_id", referencedColumnName = "id")
    private Users users;

    public Authorities(String role){
        this.role = role;
    }

}

package com.example.StarsProject.Model;

import com.example.StarsProject.DTO.UserDTO;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

@Entity
@Table
@Getter
@Setter
public class Users {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @Column(name = "first_name")
    private String firstname;
    @Column(name = "last_name")
    private String lastname;
    @Column(unique = true)
    private String email;
    private String password;
    @OneToMany(fetch = FetchType.EAGER,targetEntity = Authorities.class,mappedBy = "users", cascade = CascadeType.PERSIST)
    private  Set<Authorities> authorities;

    public Users(UserDTO userDTO) {
        this.email = userDTO.getEmail();
        this.firstname = userDTO.getFirstname();
        this.lastname = userDTO.getLastname();
        this.password = userDTO.getPassword();
//        Authorities authorities = new Authorities();
//        authorities.setRole(userDTO.getRole());
//        Set<Authorities> set = new HashSet<>();
//        set.add(authorities);
        this.authorities = new HashSet<Authorities>(Arrays.asList(new Authorities(userDTO.getRole())));
    }

}

package com.example.StarsProject.Service;

import com.example.StarsProject.DTO.UserDTO;
import com.example.StarsProject.Model.Users;
import com.example.StarsProject.Repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserDetailsServiceImpl implements UserDetailsServiceInterface{

    @Autowired
    UserRepository userRepository;

    @Override
    public void storeUserDetails(UserDTO userDTO) {
        Users users = new Users(userDTO);
        userRepository.save(users);
    }
}


When i try to save the user details it doesn't insert any value in the foreign key column. Can someone tell me what i am doing wrong.

You need to set users field in Authorities manually. Hibernate won't fill it for you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM