java - Spring Data + JPA > SQL INSERT 后未从数据库中获取 "mappedBy"属性的新条目

标签 java mysql sql-server spring spring-data-jpa

嘿。

我认为我在 Spring Data、JPA 等方面遇到了一些奇怪的行为。我编写了一个 Flyway 迁移脚本,将新数据插入表 cash_entry_note。

与实体 AbstractCashEntry 相关的方式如下:

@Entity
@Table(name = AbstractCashEntry.TABLE_NAME)
@Inheritance(strategy = InheritanceType.JOINED)
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(of = "key", callSuper = false)
@NoArgsConstructor
abstract public class AbstractCashEntry extends TenantBaseModel {

@OneToMany(mappedBy = "cashEntry", cascade = { CascadeType.ALL })
protected Set<CashEntryNote> notes = new HashSet<>();

这是 CashEntry 的父类(super class)

@Entity
@Table(name = "cash_entry")
@Data
@ToString(callSuper = true, exclude = "group")
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
public class CashEntry extends AbstractCashEntry {

最后是类 CashEntryNote 本身

@Entity
@Table(name = "cash_entry_note")
@Data
@ToString(callSuper = true, exclude = "cashEntry")
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class CashEntryNote extends BaseModel {

    @ManyToOne(optional = false)
    private AbstractCashEntry cashEntry;

    @ManyToOne(optional = false)
    private Note note;

    @ManyToOne(optional = false)
    @DiffIgnore
    private User reporter;

    public LocalDateTime getDate() {
        return createdAt;
    }
}

现在我所做的是一些简单的 SQL 插入:

INSERT INTO [cash_entry_note] (created_at, modified_at, cash_entry, note, reporter) VALUES (GETDATE(), GETDATE(), @cash_key, @initial_note, 'username')

之后,我希望 JpaRepository 返回带有我最近插入的新注释的 CashEntry 实体。然而,这种情况并非如此。 CashEntry 的属性 notes 始终是一个空集,或者包含在 SQL 插入之前已经存在的注释。即使尝试使用 FetchType.EAGER 或重新启动服务器,存储库也不会返回新插入的 sql 注释。我缺少什么?有人有想法吗?

我还应该提到,这个项目正在使用 [Javers][1] http://javers.org/documentation/跟踪实体中的更改并稍后在审核日志中提供它们。

最佳答案

明白了。 @cash_key 变量以某种方式包含空格或制表符或任何不可见的控制字符 - 但这并没有阻止它在插入之前的 where 子句中进行比较,因此确实很难查明。

SELECT @cash_key = min(cash_key) FROM cash_entry 是罪魁祸首

关于java - Spring Data + JPA > SQL INSERT 后未从数据库中获取 "mappedBy"属性的新条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41812824/

相关文章:

java - 将自定义 AccessDecisionManager 与 HttpSecurity addFilterBefore 一起使用不起作用

java - 运行应用程序时更新 JavaFX 控件

python - 解析 MariaDB 上产品的价格变化并将差异保存到产品表中

php - PDO 和 SQL Server 使用 SQL Server Auth 而不是 Windows Auth

sql-server - 如何在 SQL Server 的表值函数中使用 CTE 语句

java - 需要帮助调试电子邮件代码

java - 访问 EJB 分离的接口(interface)时出现 IllegalAccessException

mysql - 如何使用 mysqldump 转储我的数据库并使其跳过表分区信息?

mysql - 仅当另一行具有特定值时才更新多列

sql - 如何显示登录从一周到另一周的变化,按同类群组分割