Ticket.java

package org.myorg.jpatickets.bo;

import java.io.Serializable;
import java.math.BigDecimal;

import javax.persistence.*;

@SuppressWarnings("serial")
@Entity
@Table(name="JPATICKETS_TICKET")
@NamedQueries({
    @NamedQuery(name="JPATicketTicket.findTickets", 
        query="select t from Ticket t where t.seat in :seats")
})
@IdClass(TicketPK.class)
public class Ticket implements Serializable {
    @Id
    @ManyToOne(fetch=FetchType.EAGER, optional=false)
    @JoinColumn(name="EVENT_ID")
    private Event event;
    
    @Id
    @OneToOne(
            //fetch=FetchType.EAGER,
            fetch=FetchType.LAZY,
            optional=false)
    @JoinColumns({
        @JoinColumn(name="VENUE_ID"),
        @JoinColumn(name="SECTION"),
        @JoinColumn(name="ROW"),
        @JoinColumn(name="POSITION"),
    })
    private Seat seat;
    
    @Column(name="PRICE", precision=7, scale=2)
    private BigDecimal price;
    
    @Column(name="SOLD", nullable=false)
    private boolean sold;

    protected Ticket() {}    
    public Ticket(Event event, Seat seat) {
        this.event = event;
        this.seat = seat;
    }

    public Event getEvent()   { return event; }
    public Seat getSeat()     { return seat; }
    
    public BigDecimal getPrice() { return price; }
    public void setPrice(BigDecimal price) {
        this.price = price;
    }
    
    public boolean isSold() { return sold; }
    public void setSold(boolean sold) {
        this.sold = sold;
    }
    
    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("Ticket [event=").append(event)
                .append(", seat=").append(seat)
                .append(", price=").append(price)
                .append(", sold=").append(sold)
                .append("]");
        return builder.toString();
    }
    
    
}