春季数据休息:与有关非出口实体发布实体

问题描述 投票:3回答:1

我有一个是通过Spring数据休息出口,有一个关系不具有它自己的REST端点的实体的实体类型:

@Data
@NoArgsConstructor
@EqualsAndHashCode
@Entity
public class Request {

    ...

    @NotNull
    @OneToOne(cascade = CascadeType.ALL)
    @Immutable
    private Address address;

“地址”型看起来大致是这样加上地址平常的东西;)

@NoArgsConstructor
@Entity
@Getter
@Setter
public class Address {

    @Id
    @GeneratedValue
    private Long id;

有扩展CrudRepository但没有储存库的地址类型RequestRepo。

这是我做的:1。获取特定的请求实体2.更改请求的属性(没有解决)3.将整个请求

我注意到,在处理程序的@BeforeSave注解的方法,该地址酒店的“空”的ID。所以看来不是寻找在数据库中的地址,它只是创造了一个新的。

嗯,我明白,因为ID不贴有没有办法知道哪些地址在数据库中这应该是。那讲得通。

在处理程序中,我要检查,如果该地址已更改,然后以此为基础进行信息的事情。因此,我取旧版本从数据库中请求的,并比较这两个地址在哪一个NullPointerException当然的结果,由于公布的地址的ID是空的ID。我快速的解决办法是实现equals()省略了ID,并使用该方法来进行比较。

但我不知道还有什么其他的方式可能有。有任何想法吗?

java spring spring-data-rest
1个回答
0
投票

我会做一个地址的嵌入,而不是一个实体:一个地址不能在自己的权利没有请求存在,不是一个实体。你不可能想查询一个地址。这可能会有所不同,如果你有许多实体共享相同的地址,但它是一一对一所以你不知道。

您可以通过使用@SecondaryTable保持相同的数据库结构。

请求:

@Data
@NoArgsConstructor
@EqualsAndHashCode
@Entity
@Table(name = "requests")
@SecondaryTable("name = "addresses")
public class Request {

    @NotNull
    @Embedded
    private Address address;
}

地址:

@NoArgsConstructor
@Embeddable
@Getter
@Setter
public class Address {

    @Column(name="town", table="addresses")
    private String town;
}

现在,在把现有的地址将被更新。

© www.soinside.com 2019 - 2024. All rights reserved.