Hibernate не обновляет дочернюю сущность - PullRequest
0 голосов
/ 08 апреля 2020

Ребята, надеюсь, у вас все хорошо под блокировкой? У меня возникла проблема в моем рабочем проекте, проблема в том, что 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...