如何正确构建两个类之间的hibernate关系

时间:2015-09-29 11:39:38

标签: java hibernate

我有一个用户类和汽车类的情况。 我的mysql数据库中的表可能如下所示 下面是我如何想象两个实体之间关系的草图。

             user                           user_car                   car
username  firstname  lastname    <---->  username   car_id  <----> car_id   cartype
  tea       bruce      anderson           tea        1             1        ford123
  t         arnold     mena               tea        2             2        audio2
                                          t          2

用户有一个包含汽车对象的Set。但汽车不应该持有任何用户的参考。我尝试了几种方法,但总是会遇到同样的错误,并且会出现重复的关键字&#39;&#39;在小学&#34;。

@Entity
public class car {
@Id
@GeneratedValue(strategy=GenerationType.AUTO) 
private long car_id;
    private String type;

public car(){

}

public long getCar_id() {
    return car_id;
}

public void setCar_id(long car_id) {
    this.car_id = car_id;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

}

用户类

@Entity
public class userr {

    @Id
    private String username;
    private String firstname;
    private String lastname;

    //Some relation here, which I do not know how to properly set up
    private Set<Car> cars = new HashSet<>();

    public userr(){

    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public Set<Car> getCars() {
        return cars;
    }

    public void setCars(Set<Car> cars) {
        this.cars = cars;
    }
}

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

您应该使用连接表的多对多映射。在Hibernate文档中查找。

答案 1 :(得分:1)

在您的实体上使用以下映射。

@OneToMany
    @JoinTable(
            name="USER_CAR",
            joinColumns = @JoinColumn( name="username"),
            inverseJoinColumns = @JoinColumn( name="car_id")
    )
private Set<Car> cars = new HashSet<>();    

答案 2 :(得分:0)

看起来我修复了它,通过在连接表中创建第三列,自动增量并作为主键。但是现在它插入的东西超过两次。如果有人知道一个简单的修复,我会听到它的声音。