首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hibernate 5对外键的映射

Hibernate 5对外键的映射
EN

Stack Overflow用户
提问于 2017-09-24 10:14:20
回答 1查看 1.3K关注 0票数 2

我目前正在研究hibernate,我有以下postgresql表结构:

代码语言:javascript
运行
复制
CREATE TABLE tbl_secure
(
  plug_id bigserial NOT NULL,
  plug_name text DEFAULT ''::text,
  plug_user text DEFAULT ''::text,
  CONSTRAINT "PK_PLUG_ID" PRIMARY KEY (plug_id),
  CONSTRAINT tbl_secure_plug_user_fkey FOREIGN KEY (plug_user)
      REFERENCES auth_users (username) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE
)

CREATE TABLE auth_users
(
  id bigint NOT NULL DEFAULT nextval('users_id_seq'::regclass),
  username character varying(64) NOT NULL,
  passwd character varying(64) NOT NULL,
  pass_expiry date DEFAULT ((now())::date + '1 mon'::interval),
  CONSTRAINT users_pkey PRIMARY KEY (id),
  CONSTRAINT auth_users_username_key UNIQUE (username)
)

和hibernate注释的实体:

代码语言:javascript
运行
复制
@Entity
@Table(name="tbl_secure",schema="public")
public class TblSecure  implements java.io.Serializable {

     private Long plugId;
     private AuthUsers authUsers;
     private String plugName;

    public TblSecure() {
    }

    @Id @GeneratedValue(strategy=IDENTITY)
    @Column(name="plug_id", unique=true, nullable=false)
    public Long getPlugId() {
        return this.plugId;
    }

    public void setPlugId(Long plugId) {
        this.plugId = plugId;
    }

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="plug_user")
    public AuthUsers getAuthUsers() {
        return this.authUsers;
    }

    public void setAuthUsers(AuthUsers authUsers) {
        this.authUsers = authUsers;
    }


    @Column(name="plug_name")
    public String getPlugName() {
        return this.plugName;
    }

    public void setPlugName(String plugName) {
        this.plugName = plugName;
    }
}

@Entity
@Table(name="auth_users",schema="public", uniqueConstraints =@UniqueConstraint(columnNames="username"))

public class AuthUsers  implements java.io.Serializable {
     private Long id;
     private String username;
     private String passwd;
     private Set tblSecures = new HashSet(0);

    public AuthUsers() {
    }

    @Id @GeneratedValue(strategy=IDENTITY)

    @Column(name="id", unique=true, nullable=false)
    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }


    @Column(name="username", unique=true, nullable=false, length=64)
    public String getUsername() {
        return this.username;
    }

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


    @Column(name="passwd", nullable=false, length=64)
    public String getPasswd() {
        return this.passwd;
    }

    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }

    @OneToMany(fetch=FetchType.LAZY, mappedBy="authUsers")
    public Set<TblSecure> getTblSecures() {
        return this.tblSecures;
    }

    public void setTblSecures(Set<TblSecure> tblSecures) {
        this.tblSecures = tblSecures;
    }
}

我试着用HQL来取:

代码语言:javascript
运行
复制
Query query = session.createQuery("from TblSecure sec WHERE        sec.uathUser.username=:pUser AND sec.plugName=:pName AND     sec.plugSystem=:pSystem");

query.setParameter("pUser", "user");

query.setParameter("pName", "plugname");

query.setParameter("pSystem", "projectname");

List<TblSecure> result = query.list();

for(TblSecure sec2 : result){
 ///
}

我得到的错误是:

org.postgresql.util.PSQLException: ERROR:操作符不存在: text = bigint 由于hibernate格式化的sql:"tblsecure0_.plug_user=authusers1_.id“

它应该是比较tblsecure0_.plug_user=authusers1_.username

希望有人能帮助我,如果我有一个不正确的关联映射。

( TIA :)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-24 11:01:10

您正在尝试与另一个表中不是主键的外键相关地使用@ManyToOne

在这种情况下,您需要添加额外的信息以使其工作:

代码语言:javascript
运行
复制
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="plug_user", referencedColumnName="username")
public AuthUsers getAuthUsers() {
    return this.authUsers;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46388945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档