gpt4 book ai didi

java - mybatis的@TableGenerator

转载 作者:行者123 更新时间:2023-12-02 03:01:49 26 4
gpt4 key购买 nike

我已经成功地将 @TableGenerator 与 EclipseLink 结合使用:

@Id
@TableGenerator(name = "ID_GEN",
table = "seq",
pkColumnName = "seqName",
valueColumnName = "`id`",
pkColumnValue = "SEQUENCE")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "ID_GEN")
private Long id;

我正在搜索 Mybatis 是否有同等的可能性来完成相同的结果,但我唯一看到的是对 generatedKey 的一些引用:

http://www.mybatis.org/generator/configreference/generatedKey.html# )

下面的陈述(来自上面的链接)指的是一些可能的“序列”,这让我认为可能有一种方法可以使用相同类型的序列表来完成此操作。

“该元素用于指定自动生成的键的属性(来自身份字段或序列)。”

Mybatis中有没有办法使用这个@GeneeratedValue/@TableGenerator机制?

任何帮助将不胜感激。

最佳答案

@TableGenerator是JPA的特性。在底层,JPA 实现发出多个查询来生成值。 mybatis 不会这样做,也就是说,它不会执行任何您未显式指定的查询,因此没有简单且声明性的方法来实现与 @TableGenerator 提供的相同功能。您将需要模拟 hibernate 对序列表执行的查询。

在mybatis中可以使用selectKey来生成值。

这里是 documentation 中的示例,稍加修改模拟 GenerationType.SEQUENCE 策略:

<insert id="insertAuthor">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select nextval('author_id_seq')
</selectKey>
insert into Author
(id, username, password, email,bio, favourite_section)
values
(#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
</insert>

selectKey部分中可以指定任意查询。其结果将分配给 keyProperty 中指定的属性,在本例中为传递对象的 id

模拟@TableGenerator策略GenerationType.TABLE的实际查询取决于数据库。对于 postgresql,selectKey 中的查询将类似于:

INSERT INTO seq (seqName, id) values ('SEQUENCE', 1)
ON CONFLICT
DO UPDATE id = id + 1
WHERE seqName = 'SEQUENCE'
RETURNING id

关于java - mybatis的@TableGenerator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57047014/

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