使用 play / Ebean 将数据保存到数据库中的问题
Issue on saving data into DB using play / Ebean
我有 3 个 类。
- 汽车
- 用户
- 用户汽车
这 3 类 代表 table 进入我的数据库。 UserCars table 链接 Car 和 Users table 并按以下方式构建:
---用户---
内部编号
整数 cars_id
整数 user_id
-----
我尝试使用 Users_car table 来保存与其用户相关的汽车。
这是我的 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(){}
}
用户汽车
@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;
行,id 总是 0。
确实 id 仅在我保存汽车时递增 (Ebean.save(car);
)。
如何递增 ID,以便正确递增此 ID 以创建正确的 UsersCars 实例?
非常感谢!
您可以在 Cars 和 User .Like 之间创建 ManyToMany 关系
@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>();
}
上面的代码将自动创建第三个 table 说 User_Cars(您可以更改名称)具有各自的汽车和用户 ID。
同时勾选 Example
我有 3 个 类。
- 汽车
- 用户
- 用户汽车
这 3 类 代表 table 进入我的数据库。 UserCars table 链接 Car 和 Users table 并按以下方式构建:
---用户---
内部编号
整数 cars_id
整数 user_id
-----
我尝试使用 Users_car table 来保存与其用户相关的汽车。
这是我的 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(){}
}
用户汽车
@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;
行,id 总是 0。
确实 id 仅在我保存汽车时递增 (Ebean.save(car);
)。
如何递增 ID,以便正确递增此 ID 以创建正确的 UsersCars 实例?
非常感谢!
您可以在 Cars 和 User .Like 之间创建 ManyToMany 关系
@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>();
}
上面的代码将自动创建第三个 table 说 User_Cars(您可以更改名称)具有各自的汽车和用户 ID。
同时勾选 Example