如何解决在spring jpa中加入非唯一列
我想在这个论坛上找到我的问题的答案。我的问题如下,我有两个类:
@Entity
@Table(name = "a")
public class A implements Serializable{
@Id
private String id = UUID.randomUUID().toString();
@Column(name = "REFERENCE_ID")
private String referenceId;
@Column(name = "VERSION")
private String version;
}
和
@Entity
@Table(name = "b")
public class B{
@Id
private String id = UUID.randomUUID().toString();
@Column(name = "REFERENCE")
private String reference;
@ManyToMany(fetch = FetchType.LAZY)
@NotFound(action = NotFoundAction.IGnorE)
@JoinColumnsOrFormulas({
@JoinColumnorFormula(formula = @JoinFormula(value =
"(select r from A r where r.reference_id = reference_id order by r.version desc limit 1)",referencedColumnName = "reference_id")),@JoinColumnorFormula(column = @JoinColumn(name = "reference_id",referencedColumnName = "reference_id",insertable = false))
})
private A referenceId;
}
问题是 reference_id
不是 b 表中的唯一键,而只是表 A 中的指示值,因此为了获取整个对应行,我必须对连接中的公式进行一些过滤注解。
当我尝试获取我的数据时,出现以下错误
【请求处理失败;嵌套异常是 org.springframework.dao.InvalidDataAccessResourceUsageException: 无法提取结果集; sql [不适用];嵌套异常是 org.hibernate.exception.sqlGrammarException: 无法提取 ResultSet] 的根本原因是 org.postgresql.util.PsqlException: 错误:关系“a”不存在位置:309
编辑
实际上 t 将我的连接公式更改为按预期工作
@JoinFormula(value =
"(select r from schema_A r where r.reference_id = reference_id order by r.version desc limit 1)",referencedColumnName = "reference_id"))
现在的问题是代码打算在多个环境中工作 至于我的 application.yml 看起来有点像这样;
jpa:
database: POSTGREsql
show-sql: true
hibernate:
ddl-auto: update
properties:
hibernate:
format_sql: true
default_schema: schema
jdbc:
lob:
non_contextual_creation: true
time_zone: UTC
感谢您的回复:)
解决方法
我同意西蒙的评论。对于 Postgres(以及一般的关系数据库),“表”和“关系”这个词是相同的,“关系”这个词是从哪里来的。因此,当它说“找不到关系 B”时,它的字面意思是“找不到名为 B 的表”。
您应该检查架构的连接设置,以查看这些表是否已/尚未定义。如果不明显,可以根据您的连接设置和适当的调试相应地添加/编辑问题,显示您DO看到那里的关系(表格)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。