0

Guys hope you doing well under the lockdown? I have an issue occur in my work project, the problem is Hibernate won't update my child entity when I update it from the View.

my code parent class has:

@OneToMany(cascade = CascadeType.ALL, mappedBy = "permitType", fetch = FetchType.EAGER)
private Set<BlockDate> blockDates;
.....
public Set<BlockDate> getBlockDates() {return blockDates;}
public void setBlockDates(Set<BlockDate> blockDates) {this.blockDates = blockDates;}

My child class has :

@Entity
@Table(name="block_date")
public class BlockDate implements GenericModel<Long> {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "block_date")
    @TableGenerator(name = "block_date", allocationSize = 30, initialValue = 10000)
    private Long id;

    @Column(name = "effective_date", nullable = false)
    private DateTime effectiveDate;

    @ManyToOne
    @JoinColumn(name = "permit_type_fk")
    private PermitType permitType;

    @Override
    public Long getId() {return id;}
    public void setId(Long id) {this.id = id;}

    @JsonSerialize(using = CustomDateTimeSerializer.class)
    public DateTime getEffectiveDate() {return effectiveDate;}
    public void setEffectiveDate(DateTime effectiveDate) {this.effectiveDate = effectiveDate;}

    public PermitType getPermitType() {return permitType;}
    public void setPermitType(PermitType permitType) {this.permitType = permitType;}
}

My DTO code to control the child entity and pull the entry from the view is:


if (getBlockDates() != null ) {
    Set<BlockDate> blockDates = new HashSet<>();
    DateTime effectiveDate;
    DateTimeZone timeZone = DateTimeZone.forID(permitType.getPermitArea().getOrganisation().getTimezone());

    for (String blockDateString : getBlockDates()){
         effectiveDate = DATEPICKER_FORMATTER.parseDateTime(blockDateString).withZone(timeZone).withTimeAtStartOfDay();
         blockDates.add(getBlockDateAtt(permitType, effectiveDate));
         System.out.println("test dates  " + blockDateString); //this is testing how many entry from user
    }
    permitType.setBlockDates(blockDates);
    System.out.println("test the new child entity " + permitType.getBlockDates().size()); //it sets the new record on child entity if i print to consol but it wont applies on the DB

    } else{
          permitType.setBlockDates(new HashSet<>());
          System.out.println("test null " + permitType.getBlockDates().size()); // this show 0 but in the DB wont updated the child, it still have the old record
    }

and the controller simply have:

permitAreaDao.update(permitArea);
Adam Obaidi
  • 189
  • 3
  • 13

0 Answers0