Spring 属性编辑器的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 属性编辑器的问题相关的知识,希望对你有一定的参考价值。

<util:map id="MapFormat" map-class="java.util.HashMap" key-type="String" value-type="Double">
</util:map>
<bean id="MapEditor"
class="org.springframework.beans.propertyeditors.CustomMapEditor">
<constructor-arg ref="MapFormat"/>
<constructor-arg value="true"/>
</bean>
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.util.HashMap" value-ref="MapEditor"/>
</map>
</property>
</bean>
帮我看看这段代码错在哪里

参考技术A <entry key="java.util.HashMap" value-ref="MapEditor"/>

key应该是个具体的字符串追问

你这个有区别吗

基于可编辑位置属性的 Spring Data JPA 自动排序行

【中文标题】基于可编辑位置属性的 Spring Data JPA 自动排序行【英文标题】:Spring Data JPA auto ordering rows based on editable position property 【发布时间】:2020-05-17 16:44:20 【问题描述】:

我正在 Kotlin 中使用 Spring Boot 构建一个简单的 ToDo 应用程序。我都是新手。以下是数据类,我用来通过 JPA 将数据持久化到 MySQL 数据库中。

@Entity @Table
data class Task(
        @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column val id: Long,
        @Column var title: String,
        @Column var isCompleted: Boolean
)

这是 JPA 存储库。

@Repository interface TaskRepository: JpaRepository<Task, Long>

用户可以有一个任务列表。

我有两个要求,首先是当用户添加一个新任务时,它必须添加到列表的末尾,这意味着当我从数据库中检索时,我需要按照保存的顺序来保存列表。我想通过添加如下所示的位置属性来实现这一点,该属性会自动递增。建议是否有更好的选择。创建的基于时间的排序不符合我的其他要求。

@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column var position: Int

第二个要求是用户可以重新安排任务。例如,用户可以将第 8 个位置的任务移动到第 2 个位置。为此,我正在考虑将每个任务的位置从 2 增加到 7,然后将所选任务的位置更改为 2。

我不知道如何通过单个查询来实现这一点。这甚至可能吗?这是正确的做法吗?

此外,如果用户删除了一项任务,理想情况下,我希望将所有任务的位置减一。但如果它很昂贵,我可以不用它。

我真的很喜欢 Spring Boot 对配置设计的约定,所以我希望一定有一种更简单、更好的方法来满足我的要求。

【问题讨论】:

第二部分可以使用case语句。你不是第一个想要这样做的人。 @Strawberry 我清楚地知道我不是第一个想要这样做的人。这就是为什么我要问是否有经过验证的更好方法? 有关于如何改变任务位置的消息吗? 【参考方案1】:

此类功能是 JPA 规范的一部分,可以使用 @OrderColumn 注释来实现。

https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/OrderColumn.html

指定一个列,用于维护一个列的持久顺序 列表。持久性提供者负责维护 在检索和数据库中订购。 持久性提供程序是 负责在刷新到数据库时更新排序到 反映影响列表的任何插入、删除或重新排序

因此,您可以简单地定义一个从 User 到 Task 的 @OneToMany,使用这个附加注释,JPA 提供程序将根据您对列表的操作来维护持久的 order 列。

【讨论】:

以上是关于Spring 属性编辑器的问题的主要内容,如果未能解决你的问题,请参考以下文章

spring 学习自定义属性编辑器

吃透Spring源码:自定义属性编辑器PropertyEditor

Spring自定义属性编辑器

基于可编辑位置属性的 Spring Data JPA 自动排序行

SpringIOC自定义属性编辑器PropertyEditor

Spring源码分析(二十二)功能扩展