Получение нового списка имеет неполный связанный объект, который был ранее сохранен - PullRequest
0 голосов
/ 22 сентября 2018

Я создаю небольшое приложение Primefaces (Joinfaces 3.2.4, Hibernate и база данных H2).Я хочу зарегистрировать автомобиль и немедленно (в том же виде) обновить автомобили p:dataTable.Все работает отлично, и содержимое таблицы обновляется с добавлением недавно добавленной машины, но один столбец (который показывает данные, связанные с персоналом) пуст.

Объекты:

@Data
@NoArgsConstructor
@Entity
@Table(name="person")
public class Person extends DbAudit implements Serializable{

    //Id and another fields

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "person")
    private List<DbCar> cars;
}

@Data
@NoArgsConstructor
@Entity
@Table(name="car")
public class Car extends DbAudit implements Serializable{

    //Id and another fields

    @ManyToOne(optional = false)
    @JoinColumn(name = "FK", referencedColumnName = "PK_PER")
    private DbPerson person;
}

Хранилище:

@Repository
public interface CarDao extends JpaRepository<DbCar, Integer>{
}

Служба:

@Service
public class CarServiceImpl implements CarService{

    private @Autowired CarDao carDao;

    @Override
    @Transactional(readOnly = false)
    public DbCar save(DbCar car) {
        return carDao.saveAndFlush(car);
    }

    @Override
    @Transactional(readOnly = true)
    public List<DbCar> findAll() {
        return carDao.findAll();
    }

}

Контроллер:

@Controller(value = "carController")
@ViewScoped
public class CarController implements Serializable{

    private @Autowired CarService carService;

    @Getter
    @Setter
    private Car car;

    @Getter
    @Setter
    private List<Car> cars;

    public void loadCars() {
        cars = carService.findAll();
    }

    public void save() {
        carService.save(car);

        // Reset car object

        loadCars();
    }
}

XHTML Страница:

<!-- Here is register form including a selectOneMenu for choose the Person who owns the car -->

<p:commandButton value="Save" actionListener="#{carController.save}" update="tblCar">
    <p:confirm header="..." message="..." icon="ui-icon-alert" />
</p:commandButton>

<p:confirmDialog global="true">
    ...
</p:confirmDialog>

<!-- Here is cars p:datatTable (value=#{carController.cars}) -->

Я заметил, что при перезагрузке списка недавноСохраненный автомобиль имеет незавершенный объект Person (все поля нулевые, кроме id).Тогда, если я спасу другую машину, проблема теперь в новой машине, и у предыдущих машин больше нет проблем.Но когда страница перезагружается (F5), вся информация извлекается правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...