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>
帮我看看这段代码错在哪里
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源码:自定义属性编辑器PropertyEditor
基于可编辑位置属性的 Spring Data JPA 自动排序行