Ребята, надеюсь, у вас все хорошо под блокировкой? У меня возникла проблема в моем рабочем проекте, проблема в том, что Hibernate не обновляет мою дочернюю сущность, когда я обновляю ее из представления.
мой родительский класс кода имеет:
@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;}
Мой дочерний класс имеет:
@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;}
}
Мой код DTO для управления дочерней сущностью и извлечения записи из представления:
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
}
, а контроллер просто имеет:
permitAreaDao.update(permitArea);