Google AppEngine Key исключение - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть два класса, CarRentalCompany

@Entity
public class CarRentalCompany {

    private static Logger logger = Logger.getLogger(CarRentalCompany.class.getName());

    @Id
    private String name;

    @OneToMany(cascade = CascadeType.ALL)
    private List<Car> cars;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<CarType> carTypes = new ArrayList<>(); //TODO: kan betere datastructuur zijn

    /***************
     * CONSTRUCTOR *
     ***************/

    public CarRentalCompany()
    {
         // DEFAULT CONSTRUCTOR
    }

    public CarRentalCompany(String name, List<Car> cars) {
        logger.log(Level.INFO, "<{0}> Car Rental Company {0} starting up...", name);
        setName(name);
        this.cars = cars;
        for(Car car:cars) 
            carTypes.add(car.getType());
    }
    ...
}

и CarType

@Entity
public class CarType {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Key key;

    private String name;
    private int nbOfSeats;
    private boolean smokingAllowed;
    private double rentalPricePerDay;
    //trunk space in liters
    private float trunkSpace;

    /***************
     * CONSTRUCTOR *
     ***************/

    public CarType()
    {

    }

    public CarType(String name, int nbOfSeats, float trunkSpace, double rentalPricePerDay, boolean smokingAllowed) {
        this.name = name;
        this.nbOfSeats = nbOfSeats;
        this.trunkSpace = trunkSpace;
        this.rentalPricePerDay = rentalPricePerDay;
        this.smokingAllowed = smokingAllowed;
    }

При запуске приложения выдается следующее исключение:

NucleusFatalUserException: Попытка назначить ребенка с ключом "CarType (6614661952700416)" родителю с ключом "CarRentalCompany (" Hertz ")".Родительские ключи неизменны

Что мне нужно сделать, чтобы получить правильный ключ CarType?

1 Ответ

0 голосов
/ 24 ноября 2018

Вы не сохраняете свою сущность CarRentalCompany до добавления сущности CarType.Смотрите похожую тему здесь .Операция persist должна использоваться только для новых объектов.Сущность является новой, когда она никогда не ассоциировалась со строкой базы данных, а это означает, что в базе данных нет записи таблицы, соответствующей этой сущности.

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