Hibernate:映射指向唯一键的外键

 手机用户2602938483 发布于 2023-02-12 09:12

我有一个复合主键表由两列组成,该表也有一个唯一键.另一个表中的唯一键被映射为外键.如何用Hibernate实现这个映射?我为复合主键创建一个@Embedable类,在实体中我使用注释@EmbeddedId.在第二个表中,我声明了一个字段:

 @ManyToOne
 @JoinColumn(name = "user_code", nullable = false)
 public User userCode;

这是第一个表中的唯一键,但我得到一个例外:从com.users.maintenance.Code引用com.users.maintenance.User的外键具有错误的列数.应该是2.

编辑 这是我的用户类:

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

      @EmbeddedId
      public UserPk userId;

      @column(name = "code")
      public int code;

      public UserPk getUserId() {
          return this.userId;
      }

      public void setUserId(UserPk userId) {
           this.userId = userId;
      }

      public String getEmail() {
          return this.email;
      }

      public void setEmail(String email) {
           this.email = email;
      }

      @Embeddable
      private class UserPk implements Seriazible {

            @Column(name = "user_name")
            public String userName;

            @Column(name = "email")
            public String email; 

            public String getUserName() {
                return this.userName;
            }

            public void setUserName(String userName) {
                this.userName = userName;
            }

            public String getEmail() {
                return this.email;
            }

            public void setEmail(String email) {
                this.email = email;
            } 

            @Override
            public int hashCode() {
                return this.hashCode();
            }

            @Override
            public boolean equals(Object obj) {
                if (obj == this) {
        return true;
        }

        if (!(obj instanceof UserPk)) {
        return false;
        }

        UserPk pk = (UserPk)obj;

        return pk.userName == userName && pk.email == email;
           }
      }
 }

Adam Dyga.. 6

你需要告诉Hibernate User你指的是哪些列(如果它不是主键).为此,请添加referencedColumnName第二个实体:

 @ManyToOne
 @JoinColumn(name = "user_code", nullable = false, referencedColumnName = "code")
 public User userCode;

我没有检查过,但也许您还需要指定该code列在User类中是唯一的:

public class User {
...

      @Column(name = "code", unique=true)
      public int code;
...

正如旁注:不要公开所有字段,正确使用封装.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有