У меня есть 3 класса.
Проблема с сохранением данных в БД с использованием play/Ebean
- автомобили
- Пользователя
- 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?
Большое спасибо!
Что вы пытаетесь достичь средства угадать идентификатор автомобиля перед сохранением и перейти к UserCars.Can вы объяснить подробнее? – silentprogrammer
@singhakash Да, это мой вопрос. Но возможно ли это? Я уже пытался использовать статический int в Car, но он не работает, и он совсем не изящный ... Так что да, мне нужен идентификатор автомобиля, который генерируется только при вызове Ebean.save(). (Потому что только этот метод увеличивает id) – Mornor
По моим знаниям «невозможно». Существует ли какая-то конкретная причина не использовать прямую связь между Cars и User? – silentprogrammer