[jboss-user] [EJB 3.0] - How to create Rows in Database with EJB3.0 Entities - Proble

Christian.Froihofer do-not-reply at jboss.com
Sun Jan 7 12:24:06 EST 2007


Hi,

I don't have much experience in writing Entity Java Beans, so if some questions are "dummy-questions", I apologize for that.

Actual state: I have implemented Entity Java Beans with relationships between them. I can deploy them to JBOSS AS and everything is fine. Then, I want to implement a small client to fill the database with some values to check if my Beans are correct.

Problem: I have three Beans, that have relationships. 

Entity Flight, Entity FlightSeat and Entity Address

Flight has a OneToMany relationship with FlightSeat and two ManyToOne relationships with Address (for start- and destinationaddress of the flight)

No, I want to create Values in the database with the Entities, but I don't know how I have to conside the relationships. How can I add a Flight row to the database? Do I have to specifiy the start- and destinationaddress, when saving the entity Flight with Entitymanager.persist()?? Maybe you know a good Tutorial where I can see, how it is possible to fill the tables?

Here my Implementation:

Flight.java:




  | 
  | package at.ac.tuwien.inetappl.entity;
  | 
  | import java.io.Serializable;
  | 
  | import javax.persistence.CascadeType;
  | import javax.persistence.Column;
  | import javax.persistence.Entity;
  | import javax.persistence.GeneratedValue;
  | import javax.persistence.GenerationType;
  | import javax.persistence.Id;
  | import javax.persistence.JoinColumn;
  | import javax.persistence.ManyToOne;
  | import javax.persistence.OneToMany;
  | import javax.persistence.Table;
  | import javax.persistence.FetchType;
  | 
  | import java.util.Date;
  | import java.util.Collection;
  | 
  | @Entity
  | @Table (name="REL_FLIGHT")
  | public class Flight implements Serializable{
  | 
  | 	private long flightid;
  | 	private String company;
  | 	private Date duration;
  | 	private Address startaddress;
  | 	private Address destinationaddress;
  | 	private Collection<FlightSeat> seats;
  | 
  | 	
  | 	public Flight() {}
  | 	
  | 
  | 	public Flight(String company, Date duration, Address startaddress, Address destinationaddress)
  | 	{
  | 		this.company=company;
  | 		this.duration=duration;
  | 		this.startaddress=startaddress;
  | 		this.destinationaddress=destinationaddress;
  | 
  | 	}
  | 	
  | 	@Id @GeneratedValue(strategy=GenerationType.AUTO)
  | 	@Column(name="FLIGHT_ID")
  | 	public long getId()
  | 	{
  | 		return this.flightid;
  | 	}
  | 
  | 	public void setId(long flightid)
  | 	{
  | 		this.flightid = flightid;
  | 	}
  | 	
  | 	@Column(name="COMPANY")
  | 	public String getCompany()
  | 	{
  | 		return this.company;
  | 	}
  | 	
  | 	public void setCompany(String company)
  | 	{
  | 		this.company=company;		
  | 	}
  | 	
  | 	@Column(name="DURATION")
  | 	public Date getDuration()
  | 	{
  | 		return this.duration;
  | 	}
  | 	
  | 	public void setDuration(Date duration)
  | 	{
  | 		this.duration=duration;
  | 	}
  | 	
  | 	@ManyToOne (optional=false)
  | 	@JoinColumn(name = "START_ADDRESS_ID")
  | 	public Address getStartAddress()
  | 	{
  | 		return this.startaddress;
  | 	}
  | 	
  | 	public void setStartAddress(Address startaddress)
  | 	{
  | 		this.startaddress=startaddress;
  | 	}
  | 	
  | 	@ManyToOne (optional=false)
  | 	@JoinColumn(name = "DESTINATION_ADDRESS_ID")
  | 	public Address getDestinationAddress()
  | 	{
  | 		return this.destinationaddress;
  | 	}
  | 	
  | 	public void setDestinationAddress(Address destinationaddress)
  | 	{
  | 		this.destinationaddress=destinationaddress;
  | 	}
  | 	
  | 	@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="flight")
  | 	//@JoinColumn(name= "SEAT_ID")
  | 	public Collection<FlightSeat> getSeats()
  | 	{
  | 		return this.seats;
  | 	}
  | 	
  | 	public void setSeats(Collection<FlightSeat> seats)
  | 	{
  | 		this.seats=seats;
  | 	}
  | }
  | 

Address.java:


  | 
  | package at.ac.tuwien.inetappl.entity;
  | 
  | import java.io.Serializable;
  | 
  | import javax.persistence.Entity;
  | import javax.persistence.GeneratedValue;
  | import javax.persistence.GenerationType;
  | import javax.persistence.Id;
  | import javax.persistence.Table;
  | import javax.persistence.Column;
  | 
  | @Entity
  | @Table (name="REL_ADDRESS")
  | public class Address implements Serializable{
  | 	
  | 	private String land;
  | 	private String city;
  | 	private String street;
  | 	private int streetnumber;
  | 	private int postalcode;
  | 	private long addressid;
  | 	
  | 	public Address() {}
  | 	
  | 	public Address (String land, String city, String street,
  | 			int streetnumber, int postalcode) {
  | 		
  | 		this.land=land;
  | 		this.city=city;
  | 		this.street=street;
  | 		this.streetnumber=streetnumber;
  | 		this.postalcode=postalcode;		
  | 	}
  | 	
  | 	@Id @GeneratedValue(strategy=GenerationType.AUTO)
  | 	@Column(name="ADDRESS_ID")
  | 	public long getId()
  | 	{
  | 		return this.addressid;
  | 	}
  | 
  | 	public void setId(long addressid)
  | 	{
  | 		this.addressid = addressid;
  | 	}
  | 	
  | 	@Column(name="LAND")
  | 	public String getLand()
  | 	{
  | 		return this.land;
  | 	}
  | 	
  | 	public void setLand(String land)
  | 	{
  | 		this.land=land;
  | 	}
  | 	
  | 	@Column(name="CITY")
  | 	public String getCity()
  | 	{
  | 		return this.city;
  | 	}
  | 	
  | 	public void setCity(String city)
  | 	{
  | 		this.city=city;		
  | 	}
  | 	
  | 	@Column(name="STREET")
  | 	public String getStreet()
  | 	{
  | 		return this.street;
  | 	}
  | 	
  | 	public void setStreet(String street)
  | 	{
  | 		this.street=street;
  | 	}
  | 	@Column(name="STREETNUMBER")
  | 	public int getStreetNumber()
  | 	{
  | 		return this.streetnumber;
  | 	}
  | 	
  | 	public void setStreetNumber(int streetnumber)
  | 	{
  | 		this.streetnumber=streetnumber;
  | 	}
  | 	@Column(name="POSTALCODE")
  | 	public int getPostalCode()
  | 	{
  | 		return this.postalcode;
  | 	}
  | 	
  | 	public void setPostalCode(int postalcode)
  | 	{
  | 		this.postalcode=postalcode;
  | 	}	
  | }
  | 
FlightSeat.java

  | package at.ac.tuwien.inetappl.entity;
  | 
  | import java.io.Serializable;
  | 
  | import javax.persistence.Column;
  | import javax.persistence.GeneratedValue;
  | import javax.persistence.GenerationType;
  | import javax.persistence.Id;
  | import javax.persistence.Entity;
  | import javax.persistence.JoinColumn;
  | import javax.persistence.ManyToOne;
  | import javax.persistence.Table;
  | 
  | @Entity
  | @Table (name="REL_FLIGHTSEAT")
  | public class FlightSeat implements Serializable {
  | 
  | 	private long seatid;
  | 	private String category;
  | 	private int price;
  | 	private boolean available;
  | 	private Flight flight;
  | 	
  | 	public FlightSeat() {}
  | 	
  | 	public FlightSeat(String category, int price, boolean available)
  | 	{
  | 		this.category=category;
  | 		this.price=price;
  | 		this.available=available;
  | 	}
  | 	
  | 	@Id @GeneratedValue(strategy=GenerationType.AUTO)
  | 	@Column(name="SEAT_ID")
  | 	public long getId()
  | 	{
  | 		return this.seatid;
  | 	}
  | 
  | 	public void setId(long seatid)
  | 	{
  | 		this.seatid = seatid;
  | 	}
  | 	
  | 	@Column(name="CATEGORY")
  | 	public String getCategory()
  | 	{
  | 		return this.category;
  | 	}
  | 	
  | 	public void setCategory(String category)
  | 	{
  | 		this.category=category;
  | 	}
  | 	
  | 	@Column(name="PRICE")
  | 	public int getPrice()
  | 	{
  | 		return this.price;
  | 	}
  | 	
  | 	public void setPrice(int price)
  | 	{
  | 		this.price=price;
  | 	}
  | 	
  | 	@Column(name="AVAILABLE")
  | 	public boolean getAvailability()
  | 	{
  | 		return this.available;
  | 	}
  | 	
  | 	public void setAvailability(boolean available)
  | 	{
  | 		this.available=available;
  | 	}
  | 	
  | 	@ManyToOne()
  | 	@JoinColumn(name="FLIGHT_ID")
  | 	public Flight getFlight()
  | 	{
  | 		return this.flight;
  | 	}
  | 	
  | 	public void setFlight(Flight flight)
  | 	{
  | 		this.flight=flight;
  | 	}	
  | }
  | 
  | 

FlightBean.java - implementing business methods


  | package at.ac.tuwien.inetappl.bean;
  | 
  | import javax.ejb.Stateless;
  | import javax.persistence.EntityManager;
  | import javax.persistence.PersistenceContext;
  | import javax.ejb.Remote;
  | 
  | import at.ac.tuwien.inetappl.entity.Flight;
  | import at.ac.tuwien.inetappl.entity.Address;
  | import at.ac.tuwien.inetappl.entity.FlightSeat;
  | 
  | import java.util.Collection;
  | import java.util.Date;
  | import java.util.Iterator;
  | import java.io.Serializable;
  | import javax.persistence.Query;
  | 
  | 
  | 
  | @Stateless
  | @Remote(FlightInterface.class)
  | public class FlightBean implements FlightInterface, java.io.Serializable {
  | 
  | 	//private Collection<Flight> flight;
  | 	
  | 	@PersistenceContext
  | 	protected EntityManager em;
  | 	
  | 	/* CRUD METHODS FOR FLIGHT */
  | 	
  | 	/* CREATE FLIGHT */
  | 	
  | 	public void createFlight(String company, Date duration, Address start, Address dest)
  | 	{
  | 		Flight flight = new Flight();
  | 		flight.setCompany(company);
  | 		flight.setDuration(duration);
  | 		flight.setStartAddress(start);
  | 		flight.setDestinationAddress(dest);
  | 		em.persist(flight);	
  | 	}
  | 
  | 	public void updateFlight(Flight flight)
  | 	{
  | 		
  | 		em.persist(flight);
  | 		
  | 	}
  | 	
  | 	/* DELETE FLIGHT*/
  | 	
  | 	public void deleteFlight(long id)
  | 	{
  | 		
  | 		 Query q = em.createQuery("DELETE FROM FLIGHT f WHERE f.FLIGHT_ID = :id");
  | 		 q.setParameter ("id", new Long(id));
  | 		
  | 	}
  | 	
  | 	/* SEARCH METHODS FOR FLIGHT */
  | 	
  | 	public Collection<Flight> getFlights()
  | 	{
  | 		return em.createQuery("from FLIGHT f").getResultList();
  | 	}
  | 	
  | 	public Flight getFlight(long id) {
  | 		
  | 		Flight flight = em.find(Flight.class, new Long(id));
  | 		return flight; 
  | 	}
  | 	
  | 	public String getCompany(long id) {
  | 		
  | 		Flight flight = em.find(Flight.class, new Long(id));
  | 		String company = flight.getCompany();
  | 		return company;
  | 	}	
  | }
  | 

Thanks to all!! I hope, i can find help here!
Greetings,
redbaron


View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3998727#3998727

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3998727



More information about the jboss-user mailing list