【问题标题】:One to One mapping Hibernate一对一映射 Hibernate
【发布时间】:2021-08-18 09:46:44
【问题描述】:

我有两个实体(用户、汽车)。有人可以告诉如何设置这个一对一的映射。我的代码不起作用。错误:org.hibernate.AnnotationException: Unknown mappedBy in: hiber.model.Car.user, referenced property unknown: hiber.model.User.car

用户实体包含加入到 mysql 列 carIdCar car 字段。此列是与 cars 表中的 id 链接的外键

@Entity
@Table(name = "users")
public class User {
    ...
    @OneToOne
    @JoinColumn(name = "carId")
    private Car car;
    ...
}

汽车实体包含用户用户字段

@Entity
@Table(name = "cars")
public class Car {
    ...
    @OneToOne(mappedBy = "car")
    private User user;
    ...
}

public class Main {
    ...
    UserService userService = context.getBean(UserService.class);
    CarService carService = context.getBean(CarService.class);
      
    User user1 = new User("User1", "Lastname1", "user1@mail.ru");
    Car car1 = new Car("Car", 1);
    
    carService.add(car1);
    user1.setCar(car1);
    userService.add(user1); 
    ...
}

@Service 和 @Repository 类:

public class UserServiceImpl {
    ...
    @Autowired
    private UserDao userDao;
   
    public void add(User user) {
      userDao.add(user);
    }
    ...
}

在没有映射的情况下一切正常。实体分别写入数据库。

public class UserDaoImpl {
    ...
    @Autowired
    private SessionFactory sessionFactory;
    
    public void add(User user) {
      System.out.println(user.toString());
      sessionFactory.getCurrentSession().save(user);
    }
    ...
}

public class CarServiceImpl {
    ...
    @Autowired
    private CarDao carDao;
    
    public void add(Car car) {
        carDao.add(car);
    }
    ...
}

public class CarDaoImpl {
    ...
    @Autowired
    private SessionFactory sessionFactory;
    
    public void add(Car car) {
        sessionFactory.getCurrentSession().save(car);
    }
    ...
}

【问题讨论】:

    标签: java mysql spring hibernate hibernate-mapping


    【解决方案1】:

    试试这个方法:

    @Entity
    @Table(name = "users")
    public class User {
        ...
        @OneToOne
        @JoinColumn(name = "carId")
        private Car car;
        ...
    }
    
    @Entity
    @Table(name = "cars")
    public class Car {
        ...
        @OneToOne(mappedBy = "car")
        @JoinColumn(name = "userId")
        private User user;
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-10
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多