ima.technophyle
ima.technophyle

Reputation: 667

Hibernate One to One, not generating Foreign key

I have 4 tables here: Register, User, User roles and User Profile Image

Register and User are mapped my a One to One relationship and a reference of Register is generated in Users table...... This is fine..

Now talking about One to Many Relation between User and the Roles table, it also works perfectly by generating a User table reference in the roles table..

But problem is when working with One to One between User and the Profile Image. Profile Image is not generating reference of User....Why the user reference is not generated in Profile Image table

Register

@Entity
@Getter
@Setter
public class Register {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    
    @OneToOne(cascade = CascadeType.ALL,orphanRemoval = true,mappedBy = "register")
    private User user;

}

User

@Entity
@Getter
@Setter
public class User {

    @Id
    @Column(name = "User_Id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @OneToOne(cascade = CascadeType.ALL,fetch=FetchType.EAGER)
    @JoinColumn(name = "user_id")
    private UserProfileImage userProfileImage;

    @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinColumn(name = "user_id")
    private List<UserRoles> userRoles;

}

User Profile Image

@Entity
@Getter
@Setter
public class UserProfileImage {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @Column(name = "name")
    private String name;
    @Column(name = "type")
    private String type;
    @Column(name = "picByte", length = 100000)
    private byte[] picByte;

    public UserProfileImage() {
        super();
    }

    public UserProfileImage(String name, String type, byte[] picByte) {
        this.name = name;
        this.type = type;
        this.picByte = picByte;
    }
}

Upvotes: 0

Views: 931

Answers (1)

user15117826
user15117826

Reputation: 84

Profile mapping in User class is not correct and in your profile class there is no user field and hence it's not generating the user reference in the profile class.

Also, User to Roles mapping is also not correct, your user class will not populate roles with your mappings.

Try this:

public class User {

    ...
    @OneToOne(cascade = CascadeType.ALL,fetch=FetchType.EAGER)
    @JoinColumn(name = "PROFILE_IMAGE_ID")   // foreign key column in User table
    private UserProfileImage userProfileImage;

    @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER,mappedBy="user")
    private List<UserRoles> userRoles;

}


public class UserProfileImage {
    ...

    @OneToOne(mappedBy="userProfileImage")
    private User user;

    ...
}

public class UserRole {
    ...

    @ManyToOne
    @JoinColumn(name="USER_ID")  // foreign key column in User Role table
    private User user;

    ...
}

Upvotes: 0

Related Questions