因此,我正在關注一個關於hibernate的教程,因爲我想在即將推出的項目中使用該框架。我遇到了@ManyToOne和@OneToMay註釋和雙向映射的問題。我想要做的是非常基本的東西。我只想要兩張桌子,一張表示用戶,另一張表示車輛。現在,我希望用戶能夠擁有多輛車,並且汽車應該「知道」它所屬的用戶。休眠 - @ManyToOne註釋創建額外的列
因爲它似乎是創建一個額外的表格,以保持用戶和車輛之間的連接的「最佳做法」。我試圖用@JoinTable註解(見下面)來做到這一點,但它不工作,因爲我想要它。
要做到這一點,我已經編寫了以下類:
UserDetails.java
3210vehicle.java
@Entity
public class Vehicle {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int vehicleId;
private String vehicleName;
@ManyToOne
private UserDetails user;
...
getters and setters
和類檢驗以上:
HibernateTest.Java
public class HibernateTest {
/**
*
* @param args
*/
public static void main(String[] args){
UserDetails user1 = new UserDetails();
user1.setUserName("testUser1");
user1.setEmail("testEmail1");
Vehicle vehicle1 = new Vehicle();
vehicle1.setVehicleName("Car");
Vehicle vehicle2 = new Vehicle();
vehicle2.setVehicleName("Jeep");
user1.getVehicle().add(vehicle1);
user1.getVehicle().add(vehicle2);
vehicle1.setUser(user1);
vehicle2.setUser(user1);
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(user1);
session.save(vehicle1);
session.save(vehicle2);
session.getTransaction().commit();
session.close();
當我運行它,它的執行沒有任何錯誤或異常並創建下表:
USER_DETAILS
+------+----------+---------+
|userId|email |userName |
+------+----------+---------+
|1 |testEmail1|testUser1|
+------+----------+---------+
VEHICLE
+---------+-----------+-----------+
|vehicleId|vehicleName|user_userId| <- did not expect this column
+---------+-----------+-----------+
|1 |Car |1 |
+---------+-----------+-----------+
|2 |Jeep |1 |
+---------+-----------+-----------+
USER_VEHICLE
+------+----------+
|USER_ID|VEHICLE_ID|
+-------+----------+
|1 |1 |
+-------+----------+
|1 |2 |
+-------+----------+
據我瞭解,其他列「user_userId」這是由休眠創建的似乎是不必要的,因爲用戶和車輛之間的連接已經在「USER_VEHICLE」表中表示出來了,我不打算創建這個額外的列。
我做雙向映射的方式是錯誤的嗎?在沒有創建額外列的情況下,讓這個工作起作用的正確方法是什麼?
即連接表是一對多的關係不必要的。這些只在許多關係中是必需的。由於車輛僅分配給一個用戶,因此用戶表格中的foriegn鍵將進入車輛表格(您看到的額外列)。只有當用戶可以有多輛車輛並且車輛可以有多個用戶時才需要連接表。 –