Я создаю небольшое приложение 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), вся информация извлекается правильно.