हाय मेरे पास 2 इकाइयां हैं: विभाग और उपयोगकर्ता।

मैं दोनों संस्थाओं को ढूंढता हूं और एक को दूसरे में जोड़ना चाहता हूं लेकिन अगर मैं विभाग में एक उपयोगकर्ता जोड़ता हूं, तो उपयोगकर्ता के पास विभाग = शून्य है। और यदि विपरीत सत्य है, तो सूची = शून्य। इसे सही तरीके से कैसे करें?

@Entity
@Table(name = "department")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Department {

    @Id
    @GenericGenerator(name = "uuid2", strategy = "uuid2")
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "uuid2")
    @Column(length = 36, nullable = false, updatable = false)
    private UUID id;


    @Column(name = "name", nullable = false)
    private String name;
    @Column(name = "description", nullable = false)
    private String description;
    @OneToMany(mappedBy = "department", cascade = CascadeType.ALL)
    private List<User> users = new ArrayList<>();

}

@Entity
@Table(name = "user")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {

    @Id
    @GenericGenerator(name = "uuid2", strategy = "uuid2")
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "uuid2")
    @Column(length = 36, nullable = false, updatable = false)
    private UUID id;

    private String firstName;
    private String lastName;
    private Integer age;


    @ManyToOne
    private Department department;

    @ManyToMany
    @JoinTable(
            name = "device_devices",
            joinColumns = @JoinColumn(name = "user_id"),
            inverseJoinColumns = @JoinColumn(name = "device_id"))
    Set<Device> devices = new HashSet<>();

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return Objects.equal(id, user.id);
    }

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

और सेवा

@Override
@Transactional
public void addUserToDepartment(UUID departmentId,UUID userId){
    Department department = departmentRepository.findById(departmentId).orElseThrow(DepartmentNotFoundException::new);
    User user = userRepository.findById(userId).orElseThrow(UserNotFoundException::new);
    department.getUsers().add(user);
    //user.setDepartment(department);
}

मुझे ऐसा लगता है कि उपयोगकर्ता को विभाग में जोड़ना और साथ ही साथ उपयोगकर्ता को विभाग जोड़ना सही नहीं है। उन्हें खुद को ऊपर खींचना होगा। मेरी मदद करो

1
WBLord 18 अप्रैल 2021, 15:06

1 उत्तर

द्वि-दिशात्मक संबंध आपके द्वारा मैन्युअल रूप से बनाए रखा जाना है, आपके लिए इससे निपटने के लिए पर्दे के पीछे कोई जादू नहीं है।

सेवा कोड में इससे निपटने का एक विकल्प यह होगा कि इसके बजाय इसे संभालने के लिए जुड़ने वाले गुणों के सेटर्स को बढ़ाया जाए, उदाहरण के लिए उपयोगकर्ता पक्ष पर:

public void setDepartment(Department department) {
    this.department = department;
    department.getUsers().add(this);
}   

दस्तावेज़ीकरण के लिए यहां देखें।

1
Deltharis 18 अप्रैल 2021, 12:18