0

I am trying to persist an entity using following code

public ReservationEntity persistReservation(ReservationRequest reservationRequest) {
    ReservationEntity re = new ReservationEntity();
    re.setTotalPrice(new BigDecimal(123));
    re.setFlightInstance(getFlightInstanceEntity(reservationRequest.getFlightId()));
    List<PassengerEntity> passengers = new ArrayList<>();
    for (Passenger p : reservationRequest.getPassengers()){
        PassengerEntity pe = new PassengerEntity();
        pe.setFirstName(p.getFirstName());
        pe.setLastName(p.getLastName());
        passengers.add(pe);
    }
    re.setPassenger(passengers);

    em.getTransaction().begin();
    em.persist(re);
    em.getTransaction().commit();

    return re;
}

And the Passenger entity is

 @Entity
 @Table(name = "passenger", schema = "", catalog = "dbname")
 public class PassengerEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator="passengerId")
     private int passengerId;
     private String firstName;
     private String lastName;
 // GETTERS-SETTERS


 }

@Entity
@Table(name = "reservation", schema = "", catalog = "dbname")
public class ReservationEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "reservationId")
    private int reservationId;

    @OneToMany(fetch=FetchType.LAZY, cascade = CascadeType.PERSIST)
    @JoinColumn(name="passengerId")
    private List<PassengerEntity> passenger;
    public void setPassenger(List<PassengerEntity> passenger){this.passenger = passenger;}
    public List<PassengerEntity> getPassenger(){return this.passenger;}

I have tried with GenerationType.AUTO and with GenerationType.Sequence and in both case, either I got an error that table PassengerEntity.SEQUENCE doesn't exist (JPA EclipseLink DatabaseException: 'table foo.SEQUENCE doesn't exist')

I tried adding these lines and it actually deleted my entire schema with the data ...

        <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
        <property name="eclipselink.create-ddl-jdbc-file-name" value="createDDL_ddlGeneration.jdbc"/>
        <property name="eclipselink.drop-ddl-jdbc-file-name" value="dropDDL_ddlGeneration.jdbc"/>
        <property name="eclipselink.ddl-generation.output-mode" value="both"/>

And here is my schema of that specific table. The table has an FK which is having the same problem. I am trying to first persist into parent and then child.

CREATE TABLE `passenger`(
    `passengerId` INT NOT NULL AUTO_INCREMENT,
    `firstName` VARCHAR(45) NOT NULL, 
    `LastName` VARCHAR(45) NOT NULL,
    `reservationId` INT NOT NULL,
    PRIMARY KEY (`passengerId`), 
    INDEX `reservationId_idx` (`reservationId` ASC),
    CONSTRAINT `passenger_reservation_reservationId`
        FOREIGN KEY (`reservationId`)
        REFERENCES `reservation`(`reservationId`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION);

If i change GenerationType to GenerationType.IDENTITY I get error that

javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Field 'reservationId' doesn't have a default value
Error Code: 1364
Call: INSERT INTO dbname.passenger (FIRSTNAME, LASTNAME) VALUES (?, ?)
    bind => [2 parameters bound]
Query: InsertObjectQuery(com.project.entity.PassengerEntity@994)

After adding generator to the entity and changing type to SEQUENCE I am getting same error

Internal Exception: java.sql.SQLException: Field 'reservationId' doesn't have a default value
Community
  • 1
  • 1
Em Ae
  • 8,167
  • 27
  • 95
  • 162

1 Answers1

0
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="columnName")
private int passengerId;

try annotating your passengerId with above code

Priyamal
  • 2,919
  • 2
  • 25
  • 52