java - Hibernate - 如何将具有 pk 和 fk 的对象设置为数据库中的 VARCHAR?

标签 java hibernate sqlite persistence

我有两个实体,第一个是:

@Entity
@Table(name="E_CMS_CFG")
public class E_CMS_CFG extends BaseEntity{

    @Id
    @OneToOne(cascade=CascadeType.ALL)//, fetch = FetchType.EAGER)
    @JoinColumns({
        @JoinColumn(name = "CFG_TYPE", nullable = false, referencedColumnName = "CFG_TYPE", columnDefinition = "VARCHAR(32)"),
        @JoinColumn(name = "CFG_TYPE_ID", nullable = false, referencedColumnName = "ID")
        })
    private E_CMS_CFG_TYPE cfgType;

第二个实体是:

@Entity
@Table(name="E_CMS_CFG_TYPE")
public class E_CMS_CFG_TYPE extends BaseEntity{

    @Id
    @Column(name = "CFG_TYPE", length = 32)
    private String cfgType;

在第一个实体中,我在 CFG_TYPE 列上使用 columnDefinition = "VARCHAR(32)";但是,在数据库中,它正在创建一个 cfg_type 整数列。是否可以创建 VARCHAR cfg_type 列而不是整数?如果是的话,又是怎样的呢?我使用的是Sqlite 3.8.10.1版本。

更新: 该链接没有帮助,但如果我在 E_CMS_CFG 中将 @Id 替换为 @NaturalId (mutable = false),它就可以工作,但它创建它时没有主键。

最佳答案

您可以尝试在此处使用自然 id 注释。例如:

@NaturalId (mutable = false)
@Column(name = "CFG_TYPE", unique = true, nullable = false, length = 32)
private String cfgType;

但我认为您仍然需要提供 id 属性,并且它仍然是数据库中的整数值/列。

我认为这个问题与"how to use id with string type in jpa hibernate"重复。

希望对您有所帮助!

关于java - Hibernate - 如何将具有 pk 和 fk 的对象设置为数据库中的 VARCHAR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32197694/

相关文章:

java - 为 Jpa 存储库设置 sql_mode=(SELECT REPLACE(@@sql_mode ,'ONLY_FULL_GROUP_BY' ,'' ))

java - 创建添加实体时出现异常

sqlite - 在 SQLite 中使用 UUID

javascript - 如何从 Spring Boot 的端点同时返回 JSON 对象和压缩文件夹

java - 如何使用 keycloak Rest api 为用户获取更多/可选数据?

机器之间的Java jar执行差异

Java、Hibernate - 如何创建通用 getByColumnValue() 方法?

java - 是否有一种通用方法可以从不同类型的数据库加载空间数据或将空间数据存储到不同类型的数据库?

ios - 如何用应用商店中的新版本替换 iOS 应用中预先填充的核心数据?

SQLite where 子句对 TEXT 字段表现奇怪