package de.rwth.idsg.bikeman.domain;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.annotations.Type;
import org.joda.time.LocalDateTime;
import javax.persistence.*;
/**
* @author Sevket Goekay <goekay@dbis.rwth-aachen.de>
* @since 20.11.2014
*/
@Entity
@Table(name="T_RESERVATION")
@TableGenerator(name="reservation_gen", initialValue=0, allocationSize=1)
@EqualsAndHashCode(of = {"reservationId"})
@ToString(includeFieldNames = true, exclude = {"booking"})
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Reservation {
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "reservation_gen")
@Column(name = "reservation_id")
private long reservationId;
@ManyToOne
@JoinColumn(name = "card_account_id")
private CardAccount cardAccount;
@Column(name = "start_datetime", nullable = false)
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")
private LocalDateTime startDateTime;
@Column(name = "end_datetime", nullable = false)
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")
private LocalDateTime endDateTime;
@ManyToOne
@JoinColumn(name = "pedelec_id")
private Pedelec pedelec;
@Column(name = "state")
@Enumerated(EnumType.STRING)
private ReservationState state = ReservationState.CREATED;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "reservation")
private Booking booking;
}