P.K.Hindustani
P.K.Hindustani

Reputation: 148

foreign key not updated in one to many hibernate mapping

User class

@Entity
@Table(name="user")
public class User {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="PK_USER_ID")
    private Integer userId;

    @Column(name="FIRST_NAME")
    private String firstName;

    @Column(name="LAST_NAME")
    private String lastName;

    @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
    @JoinColumn(name="FK_USER_ID",referencedColumnName="PK_USER_ID")
    private Set<DeviceInfo> deviceInfos;
}

DeviceInfo

@Entity
@Table(name="device_info")
public class DeviceInfo {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="DEVICE_ID")
    private Integer deviceId;

    @Column(name="DEVICE_KEY")
    private String deviceKey;
    @Column(name="FK_USER_ID")
    private Integer userId;
}

When i try to insert data into user table and device_info table, data is inserted but foreign key column of device_info table not updated with primary key of user table.

Hibernate version:4.3.6.Final Spring version :4.3.1

Upvotes: 2

Views: 3297

Answers (2)

Mahendra Kapadne
Mahendra Kapadne

Reputation: 426

I think @ManyToOne mapping is missing in your entity DeviceInfo

User.java

@Entity
@Table(name="user")
public class User {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="PK_USER_ID")
    private Integer userId;

    @Column(name="FIRST_NAME")
    private String firstName;

    @Column(name="LAST_NAME")
    private String lastName;

    @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY, mappedBy = "user")
    private Set<DeviceInfo> deviceInfos;
}

DeviceInfo.java

@Entity
@Table(name="device_info")
public class DeviceInfo {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="DEVICE_ID")
    private Integer deviceId;

    @Column(name="DEVICE_KEY")
    private String deviceKey;

  @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PK_USER_ID", nullable = false)
    private User user;
} 

Upvotes: 0

Rohit
Rohit

Reputation: 78

Have you missed setting user Object in deviceInfo object before persisting, code should look like:

user.setDeviceInfo(setOfDeviceInfo);

deviceInfo.setUser(user);

session.save(user);

Upvotes: 1

Related Questions