package com.billpaymentservice.bbps.entites; import java.util.List; import jakarta.persistence.ForeignKey; import jakarta.persistence.CascadeType; import jakarta.persistence.CollectionTable; import jakarta.persistence.Column; import jakarta.persistence.ConstraintMode; import jakarta.persistence.ElementCollection; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; @Getter @Setter @Entity @Table(name = "bbps_biller_groups") public class Group extends Auditable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "group_id") private Long id; @Column(name = "group_name") private String name; @Column(name = "input") private String input; @CollectionTable( name = "group_params", joinColumns = @JoinColumn(name = "group_id"), foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT) ) private List params; // 🔗 Parent group relationship (for nested groups) @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "parent_group_id") private Group parentGroup; // 🔁 Child groups (self-reference) @OneToMany(mappedBy = "parentGroup", cascade = CascadeType.ALL, orphanRemoval = true) private List groups; // 🔗 Back reference to CustomerParamGroups @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "group_container_id") private CustomerParamGroups customerParamGroups; }