java - 非 PK 列的 Hibernate ManyToOne JOIN 抛出 "Bad value for type int"

标签 java spring hibernate postgresql jpa

首先让我明确我的场景我正在使用 hibernate 4.3,带有 spring MVC 的 Postgresql 9.3,并且我使用 JBOSS 工具对类进行了逆向工程。

每次我使用 HQL 或 session.get() 选择数据时,我都会得到(SQL 查询工作正常) 原因:org.postgresql.util.PSQLException:int 类型的错误值:demoemailaddr@gmail.com

实体类,
申请人.java

@Entity
@Table(name = "applicant", schema = "public", uniqueConstraints = { @UniqueConstraint(columnNames = "user_id"), @UniqueConstraint(columnNames = "email"), @UniqueConstraint(columnNames = "registration_id") })
public class Applicant implements java.io.Serializable
{
    @Id
    @Column(name = "application_id", unique = true, nullable = false, length = 7)
    private String applicationId;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "email", unique = true, nullable = false)
    private Users usersByEmail;

     // setters and getters
}

和与上述类具有@ManytOne 关系的 Users 类。

@Entity
@Table(name = "users", schema = "public", uniqueConstraints = { @UniqueConstraint(columnNames = "email"), @UniqueConstraint(columnNames = "application_id") })
public class Users implements java.io.Serializable
{
    @Id
    @Column(name = "user_id", unique = true, nullable = false)
    private int userId;

    @Column(name = "email", unique = true, nullable = false, length = 100)
    private String email;

}

现在检查模式结构

CREATE TABLE users
(
  email character varying(100) NOT NULL,
  user_id integer NOT NULL,
  CONSTRAINT users_pk PRIMARY KEY (user_id),
  CONSTRAINT unique_email UNIQUE (email)
)

 CREATE TABLE applicant
(
  application_id character(7) NOT NULL,
  email character varying(100) NOT NULL,
  CONSTRAINT users_email_fk FOREIGN KEY (email)
  REFERENCES users (email) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT unique_applicant_email UNIQUE (email)
 )

[已编辑] 我在用户表的电子邮件上使用连接列,它具有唯一约束但不是 PK(PK 是 user_id)
PS:我没权限改db schema结构

最佳答案

您需要将referencedColumnName 属性添加到@ManyToOne 关联:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "email", referencedColumnName = "email", unique = true, nullable = false)
private Users usersByEmail;

关于java - 非 PK 列的 Hibernate ManyToOne JOIN 抛出 "Bad value for type int",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29262497/

相关文章:

java - 应用程序崩溃: Android using Fragments

java - 无法在 JBoss EAP 6.2 中通过 SSL 连接到 SOAP 服务

java - 如何使用 Spring Security 允许转发到外部 URL

java - Bean创建异常: No factory method found

java - 两个线程查询一个表

java - 如何在 spring 项目中使用自定义注释(hibernate)加密/解密数据

java - 在 Spark 1.6.0 上,获取与 spark.driver.maxResultSize 相关的 org.apache.spark.SparkException

java - 我无法使用java类获取资源。错误: Attempt to invoke virtual method

Spring @Transactional 值参数与 SpEL(Spring 表达式语言)

java - SessionFactory.getCurrentSession() 线程安全吗?