Primavera de datos Resto: Publicación entidad con relación a la entidad no exportada

user3235738:

Tengo un tipo de entidad que se exporta a través de la primavera de datos REST y tiene una relación con una entidad que no tenga su propio extremo REST:

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

    ...

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

El tipo de "Dirección" se ve más o menos así más el material habitual para las direcciones;)

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

    @Id
    @GeneratedValue
    private Long id;

Hay una RequestRepo que se extiende CrudRepository pero NO repositorio para el tipo de dirección.

Esto es lo que hago: 1. Obtener una entidad determinada solicitud 2. Realizar un cambio en una propiedad de la solicitud (no electrónico) 3. Ponga toda la Solicitud

Me di cuenta, en el método @BeforeSave anotada del guía, que la propiedad de dirección tiene un id de "nulo". Así que parece que en vez de buscar esa dirección en la base de datos, simplemente se crea una nueva.

Bueno, entiendo que, dado que la identificación no se publica no hay manera de saber qué dirección en la base de datos esto se supone que es. Eso tiene sentido.

En el controlador, quiero comprobar si la dirección ha cambiado y luego hacer las cosas en base a esa información. Por lo tanto, voy a buscar la versión antigua de la Solicitud de la base de datos y comparar los ID de las dos direcciones que por supuesto da como resultado una NullPointerException, ya que el ID de la Posteado dirección es nula. Mi solución rápida sería implementar equals () omitiendo el identificador y el uso de este método para hacer la comparación.

Pero me pregunto qué otras maneras que pudiera haber. ¿Algunas ideas?

Alan Hay:

Me gustaría hacer una dirección de un insertable en lugar de una entidad: no puede existir sin una dirección de una petición y no es una entidad en sí misma. Es poco probable que desee para consultar una dirección. Esto puede ser diferente si tuviera muchas entidades que comparten la misma dirección pero es un ser-uno-uno para que no lo hace.

Usted puede mantener la misma estructura de base de datos utilizando @SecondaryTable.

Solicitud:

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

    @NotNull
    @Embedded
    private Address address;
}

Habla a:

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

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

Ahora en PUT se actualizará la dirección existente.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=219800&siteId=1
Recomendado
Clasificación