【发布时间】:2015-03-02 14:16:46
【问题描述】:
我有 3 节课。
- 汽车
- 用户
- 用户汽车
这 3 个类代表我的数据库中的表。 UserCars 表链接 Car 和 Users 表,它的构造方式如下:
---用户---
整数ID
整型汽车ID
int 用户 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(){}
}
用户汽车
@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。
确实只有在我保存汽车 (Ebean.save(car);) 时才会增加 ID。
如何增加 ID,以便正确增加 ID 以创建正确的 UsersCars 实例?
非常感谢!
【问题讨论】:
-
你想要达到什么目的意味着在保存并传递给 UserCars 之前猜测 Car 的 id。你能解释一下吗?
-
@singhakash 是的,这是我的问题。但这可能吗?我已经尝试在 Car 中使用静态 int,但它不起作用,而且一点也不优雅……所以是的,我需要仅在调用 Ebean.save() 时生成的 Car 的 Id。 (因为只有这个方法会增加 id)
-
据我所知
not possible.Btw 不使用 Cars 和 User 之间直接关系的具体原因? -
@singhakash 没有特别的原因,我觉得这种方式更方便和优雅。有没有可能的解决方法?或者绕过这个问题?
-
对不起,但我不同意。我认为最后你在 Cars 和 User 之间建立了 ManyToMany 关系。在你的情况下,你明确地创建映射表 UserCars 为什么要编写这么多创建 UserCars 等的代码而不是使用 ManyToMany 注释,它会为你做每件事。
标签: java playframework playframework-2.0 ebean playframework-2.3