簡體   English   中英

Google AppEngine密鑰異常

[英]Google AppEngine Key exception

我有兩個班,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的密鑰?

在添加CarType實體之前,您不會保留 CarRentalCompany實體。 在這里看到類似的主題。 持久操作必須僅用於新實體。 當一個實體從未與數據庫行關聯時,它是新的,這意味着數據庫中沒有與該實體匹配的表記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM