【发布时间】:2020-08-30 19:59:27
【问题描述】:
我在 Kotlin 中使用 Spring Jpa,我有 2 个表,第一个是用户表,第二个是刷新令牌表,其中列 user_id 引用 users.id 列
我正在尝试在这两个表之间创建 OneToOne 关系
这是我的用户实体
@Entity
@Table(name = "users")
class User (
val name: String
@OneToOne(mappedBy = "user", cascade = [CascadeType.ALL])
val refreshToken: Token? = null
) : : AbstractBaseEntity<Long>()
和Token实体
@Table(name = "user_refresh_token")
@Entity
class Token (
var token: String,
val userId: Long,
@MapsId
@OneToOne
val user: User? = null
) : AbstractBaseEntity<Long>()
AbstractBaseEntity 仅包含 Id 字段
@MappedSuperclass
abstract class AbstractBaseEntity<T> {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: T? = null
}
在我的 Postgres 数据库中看起来像
create table users (
id serial primary key,
name text not null
);
create table user_refresh_token (
user_id int primary key references users(id) on delete cascade,
token text not null
)
在日志中我看到了错误
Caused by: org.hibernate.DuplicateMappingException: Table [user_refresh_token] contains physical column name [user_id] referred to by multiple logical column names: [user_id], [userId]
也是我的 TokenRepository
@Repository
interface TokenRepository : CrudRepository<Token, Long>
我无法弄清楚为什么会发生这种情况以及为什么列 user_id 引用了多个列名,有什么想法吗?
【问题讨论】:
标签: spring postgresql hibernate