gpt4 book ai didi

postgresql - 外键上的 Hibernate 5 映射

转载 作者:行者123 更新时间:2023-11-29 12:24:49 25 4
gpt4 key购买 nike

我目前正在学习hibernate,我有以下postgresql表结构:

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 注解的实体:

@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 获取:

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: operator does not exist: text = bigint

due to this hibernate formatted sql : "tblsecure0_.plug_user=authusers1_.id"

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

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

TIA:)

最佳答案

您正在尝试将 @ManyToOne 与不是另一个表中的主键的外键相关联。

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

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

关于postgresql - 外键上的 Hibernate 5 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46388945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com