package de.rwth.idsg.bikeman.domain;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.io.Serializable;
import java.util.List;
import java.util.Set;
@Entity
@Table(name = "T_PEDELEC")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@TableGenerator(name="pedelec_gen", initialValue=0, allocationSize=1)
@EqualsAndHashCode(callSuper = false, of = {"pedelecId", "manufacturerId"})
@ToString(includeFieldNames = true, exclude = {"transactions", "stationSlot", "reservations"})
@Getter
@Setter
public class Pedelec extends AbstractTimestampClass implements Serializable {
private static final long serialVersionUID = 7187208000731589081L;
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "pedelec_gen")
@Column(name = "pedelec_id")
private long pedelecId;
@Column(name = "manufacturer_id")
private String manufacturerId;
@Column(name = "in_transaction")
private Boolean inTransaction = false;
@Column(name = "state")
@Enumerated(EnumType.STRING)
private OperationState state = OperationState.INOPERATIVE;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pedelec")
private Set<Transaction> transactions;
@OneToOne(fetch = FetchType.EAGER, mappedBy = "pedelec", cascade = CascadeType.ALL)
private PedelecChargingStatus chargingStatus;
@OneToOne(mappedBy = "pedelec")
private StationSlot stationSlot;
@OneToMany(mappedBy = "pedelec")
private List<Reservation> reservations;
@Column(name = "error_code")
private String errorCode;
@Column(name = "error_info")
private String errorInfo;
@PrePersist
public void prePersist() {
super.prePersist();
}
}