Skip to content

Commit

Permalink
Addding ManyToOne relation
Browse files Browse the repository at this point in the history
  • Loading branch information
majdbousaad committed Jan 31, 2019
1 parent deeb358 commit f32c9f2
Show file tree
Hide file tree
Showing 9 changed files with 98 additions and 18 deletions.
7 changes: 3 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@
A training project for MagnaMedia

## Solution
1. Adding `@JsonManagedReference` and `@JsonBackReference` around the relational entities
2. Adding Exceptions
3. Custom queries to fetch super classes
1. Adding `@ManyToOne` relation
2. Adding more exceptions
3. Adding repoistories for superclasses to fetch their entities

## Problems
1. No transactional
2. OneToOne relation only
1 change: 0 additions & 1 deletion src/main/java/majd/project/MajdProjectApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ public class MajdProjectApplication {

public static void main(String[] args) {
SpringApplication.run(MajdProjectApplication.class, args);

}

}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package majd.project.classes.driver;

import java.util.Optional;

import org.springframework.data.repository.CrudRepository;

public interface DriverRepository extends CrudRepository<Driver, Integer>{

public Optional<Driver> findByVehicleId(Integer vehicleId);

}
12 changes: 3 additions & 9 deletions src/main/java/majd/project/classes/driver/DriverService.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

Expand Down Expand Up @@ -50,12 +48,10 @@ public void deleteDriver(Integer id) {
}
public Driver getDriverByVehicleId(Integer vehicleId) {

Query query = entityManager.createQuery("SELECT b FROM Driver b WHERE vehicle_id = ?1", Driver.class);

query.setParameter(1, vehicleId);
Driver driver = null;
try {
driver = (Driver) query.getResultList().get(0);
driver = driverRepository.findByVehicleId(vehicleId).get();

} catch (Exception e) {
throw new RuntimeException("No driver assigned to vehicle " + vehicleId, e);
}
Expand All @@ -64,12 +60,10 @@ public Driver getDriverByVehicleId(Integer vehicleId) {
public void assignVehicleToDriver(Integer driverId, Integer vehicleId) {
Driver driver = null;
Vehicle vehicle = null;
Query query = entityManager.createQuery("SELECT b FROM Vehicle b WHERE id = ?1", Vehicle.class);
query.setParameter(1, vehicleId);

try {
driver = driverRepository.findById(driverId).get();
vehicle = (Vehicle) query.getResultList().get(0);
vehicle = vehicleRepository.findById(vehicleId).get();

} catch (Exception e) {
throw new RuntimeException("Error finding Driver " + driverId + " or Vehicle " + vehicleId, e);
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/majd/project/classes/passenger/Passenger.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,25 @@
package majd.project.classes.passenger;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;

import com.fasterxml.jackson.annotation.JsonBackReference;
import majd.project.superclasses.person.Person;
import majd.project.superclasses.vehicle.Vehicle;

@Entity
public class Passenger extends Person {

@Column(nullable=false)
private String destination;
private int payment;


@ManyToOne
@JsonBackReference
private Vehicle vehicle;

public Passenger() {
}

Expand All @@ -32,6 +41,14 @@ public int getPayment() {
public void setPayment(int payment) {
this.payment = payment;
}

public Vehicle getVehicle() {
return vehicle;
}

public void setVehicle(Vehicle vehicle) {
this.vehicle = vehicle;
}



Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package majd.project.classes.passenger;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
Expand Down Expand Up @@ -31,4 +33,15 @@ public void addPassenger(@RequestBody Passenger passenger) {
public void deletePassenger(@PathVariable Integer id) {
passengerService.deletePassenger(id);
}

@RequestMapping(method=RequestMethod.POST, value="/assign/passengers/to/vehicle/{vehicleId}")
public void assignPassengersToVehicle(@RequestBody List<Passenger> passengers,@PathVariable Integer vehicleId) {

passengerService.assignPassengersToVehicle(passengers, vehicleId);

}
@RequestMapping("/find/passengers/of/vehicle/{vehicleId}")
public Iterable<Passenger> findPassengersOfVehicleId(@PathVariable Integer vehicleId) {
return passengerService.findPassengersOfVehicleId(vehicleId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
import org.springframework.data.repository.CrudRepository;

public interface PassengerRepository extends CrudRepository<Passenger, Integer>{

public Iterable<Passenger> findByVehicleId(Integer vehicleId);
}
42 changes: 40 additions & 2 deletions src/main/java/majd/project/classes/passenger/PassengerService.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,24 @@
package majd.project.classes.passenger;


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import majd.project.classes.passenger.Passenger;
import majd.project.superclasses.vehicle.Vehicle;
import majd.project.superclasses.vehicle.VehicleRepository;

@Service
public class PassengerService {


@Autowired
private PassengerRepository passengerRepository;

@Autowired
private VehicleRepository vehicleRepository;

public Iterable<Passenger> getAllPassengers() {
return passengerRepository.findAll();
}
Expand All @@ -34,5 +42,35 @@ public void deletePassenger(Integer id) {
throw new RuntimeException("Passenger " + id + " does not exist", e);
}

}
}

public void assignPassengersToVehicle(List<Passenger> passengers, Integer vehicleId) {

Vehicle vehicle = null;
try {
vehicle = vehicleRepository.findById(vehicleId).get();
} catch (Exception e) {
throw new RuntimeException("Vehicle with id " + vehicleId + " does not exist!", e);
}


for(Passenger passenger : passengers) {
passenger.setVehicle(vehicle);
try {
passengerRepository.save(passenger);
} catch (Exception e) {

throw new RuntimeException("Error saving some passenger", e);
}


vehicle.getPassengers().add(passenger);

}
vehicleRepository.save(vehicle);
}

public Iterable<Passenger> findPassengersOfVehicleId(Integer vehicleId) {
return passengerRepository.findByVehicleId(vehicleId);
}
}
18 changes: 18 additions & 0 deletions src/main/java/majd/project/superclasses/vehicle/Vehicle.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
package majd.project.superclasses.vehicle;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;

import com.fasterxml.jackson.annotation.JsonManagedReference;

import majd.project.classes.driver.Driver;
import majd.project.classes.passenger.Passenger;


@Entity
Expand All @@ -28,6 +32,10 @@ public abstract class Vehicle {
@JsonManagedReference
private Driver driver;

@OneToMany
@JsonManagedReference
private List<Passenger> passengers;

public Vehicle() {
}

Expand Down Expand Up @@ -62,5 +70,15 @@ public Driver getDriver() {
public void setDriver(Driver driver) {
this.driver = driver;
}

public List<Passenger> getPassengers() {
return passengers;
}

public void setPassengers(List<Passenger> passengers) {
this.passengers = passengers;
}



}

0 comments on commit f32c9f2

Please sign in to comment.