Sql Hibernate主键注释返回空值

Sql Hibernate主键注释返回空值,sql,spring,hibernate,Sql,Spring,Hibernate,我在跟踪 用于学习主键注释 我有两节课 @Id @Column @GeneratedValue(strategy=GenerationType.AUTO) private int id; private String firstName; private String lastName; private String email; private String password; private String profession; @OneToOne(mappedBy="user" , c

我在跟踪

用于学习主键注释

我有两节课

@Id
@Column
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

private String firstName;
private String lastName;
private String email;
private String password;
private String profession;

@OneToOne(mappedBy="user" , cascade=CascadeType.ALL)
private Profile profile;
还有我的个人资料课

@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
private int id; //profileId
private int userId;
private String specialization;
private String hospital;
private String clinicAddress;
private String clinicTime;
private String about;


@OneToOne
@PrimaryKeyJoinColumn
private User user;
两个表中都有条目,但我得到的是profile的
null
值。谁能告诉我我的代码有什么问题吗。我的桌子是空的

配置文件表为:

CREATE TABLE `profile` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userId` int(11) DEFAULT NULL,
`specialization` varchar(100) DEFAULT NULL,
`hospital` varchar(100) DEFAULT NULL,
`clinicAddress` varchar(100) DEFAULT NULL,
`clinicTime` varchar(12) DEFAULT NULL,
`about` varchar(300) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk` (`userId`),
KEY `pfk` (`userId`),
CONSTRAINT `pfk` FOREIGN KEY (`userId`) REFERENCES `user` (`id`) ON DELETE   NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1$$
用户表是

CREATE TABLE user (
id int(11) NOT NULL AUTO_INCREMENT,
firstName varchar(45) DEFAULT NULL,
lastName varchar(45) DEFAULT NULL,
email varchar(45) DEFAULT NULL,
password varchar(45) DEFAULT NULL,
profession varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1$$
编辑:当我使用

@JoinColumn(name = "userId")
private User user;
然后从Profile类中删除
userId
字段,它可以查找并获取Profile对象

现在,当我在Profile类中添加
userId
字段时,我得到

Repeated column in mapping for entity: com.analyst.future.domain.Profile column: userId (should be mapped with insert="false" update="false")
UserProfileForm:

 UserProfileForm {

private int userId;
private String specialization;
private String hospital;
private String clinicAddress;
private String clinicTime;
private String about;
控制器:

public String registerNewUser(HttpServletRequest request, @ModelAttribute ("form") SignupForm form){
    User user = new User();
    try {
        BeanUtils.copyProperties(user, form);
    } catch (IllegalAccessException e) {    
        logger.error("ERROR : unable to copy values from form to user object");
        e.printStackTrace();
    } catch (InvocationTargetException e) {         
        e.printStackTrace();
    }

    Integer userId = userService.addUser(user);
    UserProfileForm profileForm = new UserProfileForm();
    profileForm.setUserId(userId);
    profileService.addProfile(profileForm);

    mailService.sendAccountCreatingNotification(user);

    return REDIRECT_CONFIRMATION_VIEW;
}
在役:

public Profile addProfile(UserProfileForm form) {
    Profile profile = new Profile();
    try {
        BeanUtils.copyProperties(profile, form);
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       

    return profileDAO.addProfile(profile);
}
在ProfileDAOImpl中

public Profile addProfile(Profile profile) {
    Session session = this.sessionFactory.getCurrentSession();
    session.persist(profile);       
    return profile;
}

映射表明profile的ID也是一个连接列(即引用用户ID的外键)。这就是
@PrimiryKeyJoinColumn
的意思

但是您的表定义显示,您在概要文件中有一个userId列来引用概要文件的用户ID。因此,您实际上应该使用
@JoinColumn(name=“userId”)


下定决心,选择你真正想做的事情。

在Profile object中,你有以下几行:

@OneToOne
@PrimaryKeyJoinColumn
private User user;
将这些更改为:

@JoinColumn(name = "userId")
private User user;

PrimaryKeyJoinColumn注释在此处使用错误。您的数据库表不建议用户id是主键联接列。

谢谢您的回复。我这样做了,在这种情况下它也工作得很好,但问题是我必须从Profile类中删除userId变量。在这种情况下,我将无法在配置文件表中添加userId以添加新用户。你在做什么,你预计什么时候会发生,会发生什么?编辑您的问题。我已更新了问题,以反映我在使用您建议的解决方案时遇到的错误。您不应添加userId。您已与用户建立了OneToOne。添加用户id是多余的。是的,你是对的,但是当我从Profile类中删除此字段并添加一个新的配置文件时,用户id中的值为null,这应该是新用户的id。那么我如何将我的用户id设为主键联接列?因为我在使用您建议的解决方案时遇到了一些问题。