0

У меня есть 3 класса.
Проблема с сохранением данных в БД с использованием play/Ebean

  1. автомобили
  2. Пользователя
  3. UserCars

Эти 3 класса представляет собой таблицу в мою БД. Таблица UserCars связывает таблицу автомобилей и пользователи, и он построен следующим образом:

--- Пользователи ---
INT идентификатор
INT cars_id
INT user_id
-----

Я пытаюсь сохранить автомобиль, связанный с его пользователем, используя таблицу Users_car.

Это мои 3 класса:
автомобилей

@Entity 
public class Car extends Model{ 

    @Id 
    @GeneratedValue 
    public int id; 
    public String brand; 
    public String model; 
    public String fuel; 
    public double avg_cons; // Average consumption 
    public double c02_cons; 
    public double htva_price; 
    public double leasing_price; 

    public static Finder<String, Car> find = new Finder<String, Car>(
      String.class, Car.class 
    ); 

} 

Пользователь

@Entity 
public class User extends Model{ 

    @Id 
    @GeneratedValue 
    public int id; 
    public String name; 
    public String username; 
    public String email; 
    public String password; 
    public String phoneNumber; 
    public Timestamp inscriptionDate; 
    @Transient 
    public Timeline timeline; 

    public User(){} 
} 

UserCars

@Entity 
@Table(name = "user_cars") 
public class UserCars extends Model{ 

    @Id 
    @GeneratedValue 
    public int id; 
    @ManyToOne 
    public int user_id; 
    @OneToOne 
    public int car_id; 

    public UserCars(int userId, int carId){ 
     this.user_id = userId; 
     this.car_id = carId; 
    } 

    public static Finder<String, UserCars> find = new Finder<String, UserCars>(
      String.class, UserCars.class 
    ); 
} 

А вот так я спас его:

public static Result saveCar(){ 
     // Retrieve the current username 
     DynamicForm params = Form.form().bindFromRequest(); 
     String username = params.get("username"); 
     User current = User.find.where().like("username", username).findUnique(); 
     int currentUserId = current.getId(); 

     // Get data from android and save it to DB 
     Car car = Form.form(Car.class).bindFromRequest().get(); 
     int currentCarId = car.id; 
     UserCars userCars = new UserCars(currentUserId, currentCarId); 

     try { 
      Ebean.save(car); 
      Ebean.save(userCars); 
     } catch (OptimisticLockException e) { 
      e.printStackTrace(); 
      return internalServerError("Car registration failed"); 
     } 

     return ok(); 
    } 

Дело в том, в строке int currentCarId = car.id;, й идентификатор всегда 0. Действительно идентификатор только увеличивается при сохранении автомобиля (Ebean.save(car);).

Как я могу увеличить идентификатор, чтобы этот показатель был увеличен правильно, чтобы создать правильный экземпляр UsersCars?

Большое спасибо!

+0

Что вы пытаетесь достичь средства угадать идентификатор автомобиля перед сохранением и перейти к UserCars.Can вы объяснить подробнее? – silentprogrammer

+0

@singhakash Да, это мой вопрос. Но возможно ли это? Я уже пытался использовать статический int в Car, но он не работает, и он совсем не изящный ... Так что да, мне нужен идентификатор автомобиля, который генерируется только при вызове Ebean.save(). (Потому что только этот метод увеличивает id) – Mornor

+0

По моим знаниям «невозможно». Существует ли какая-то конкретная причина не использовать прямую связь между Cars и User? – silentprogrammer

ответ

2

Вы можете создать ManyToMany соотношение между вагонами и пользователем .like

@Entity 
public class Car extends Model{ 

//other fields 

@ManyToMany 
public List<User> users=new ArrayList<User>(); 

} 

@Entity 
public class User extends Model{ 

//other fields  

@ManyToMany 
public List<Car> users=new ArrayList<Car>(); 

} 

выше код будет автоматически создать третью таблицу сказать user_cars (вы можете изменить имя), имеющее соответствующий идентификатор автомобиля и пользователя.

Также проверьте Example

+0

okkk. Например, я создаю пользователя, а затем, если я хочу добавить автомобиль к этому пользователю, должен ли я сделать обновление? – Mornor

+0

@Mornor да, вы должны обновить пользователя – silentprogrammer

+0

Многие, большое спасибо за то, что вы взяли :) – Mornor

 Смежные вопросы

  • Нет связанных вопросов^_^