я следующая БД:Hibernate много-к-одному, без внешнего ключа, но с обратным внешним ключом
CREATE TABLE car_owner (
car_owner_id int(11) NOT NULL,
car_id_fk int(11) DEFAULT NULL,
PRIMARY KEY (car_owner_id),
KEY car_owner_car_fk_idx (car_id_fk),
CONSTRAINT car_owner_car_fk FOREIGN KEY (car_id_fk) REFERENCES car (car_id) ON DELETE NO ACTION ON UPDATE NO ACTION,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE car (
car_id int(11) NOT NULL AUTO_INCREMENT,
car_type varchar(45) DEFAULT NULL,
car_plates varchar(25) DEFAULT NULL,
PRIMARY KEY (car_id),
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
И В модели Java:
Для CarOwner у меня есть:
@Entity
@Table(name="car_owner")
@NamedQuery(name="CarOwner.findAll", query="SELECT co FROM CarOwner co")
public class CarOwner implements Serializable {
@Id
@GeneratedValue
@Column(name="car_owner_id")
private Integer carOwnerId;
.....
//bi-directional many-to-one association to Car
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "car_id_fk", referencedColumnName = "car_id")
private List<Car> cars;
И для автомобилей:
@Entity
@Table(name="car")
@NamedQuery(name="Car.findAll", query="SELECT c FROM Car c")
public class Car implements Serializable {
@Id
@GeneratedValue
@Column(name="car_id")
private Integer carId;
......
//bi-directional many-to-one association to car_owner
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name = "car_owner_id")
private CarOwner carOwner;
Проблема в том, что Hibernate не может связывать таблицы и автоматически создает новые столбцы car_id
и car_owner_id
.
Может кто-нибудь помочь в поиске правильной комбинации в модели для надлежащего соотнесения таблиц.
Я получаю это исключение: 'com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Неизвестный столбец 'car0_.car_owner_id' в 'списке поля' \t sun.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method)' – GingerHead
потому, что в У факта 'car' нет столбца с именем' car_owner_id'. , , ничего не решено. , , – GingerHead
Я не обращал достаточного внимания на SQL Ginger. Ну, тогда это не двунаправлено. Это основной недостаток. – Shahzeb