【问题标题】:Can't do a POST for a new object SPRING DATA REST无法为新对象 SPRING DATA REST 进行 POST
【发布时间】:2016-08-30 19:18:10
【问题描述】:

我有一个用于后端的 spring data rest api 和一个用于前端的 AngularJs(mysql 作为数据库)。 我正在尝试使用我制作以下 JAVA 逻辑的存储库将“dictamenes”列表添加到“expediente”

混合 Java 类 ExpedienteDictamen:

@Entity
@Table(name="expediente_dictamen")
public class ExpedienteDictamen implements Serializable{

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@RestResource(exported=false)
@ManyToOne(fetch = FetchType.EAGER, targetEntity = Expediente.class, optional=false, cascade=CascadeType.MERGE)
@JoinColumns(value = {
        @JoinColumn(name = "expediente", referencedColumnName = "id", insertable = true, updatable = true, nullable = true)})
private Expediente expediente;
@RestResource(exported=false)
@ManyToOne(fetch = FetchType.EAGER, targetEntity = Dictamen.class, optional=false, cascade=CascadeType.MERGE)
@JoinColumns(value = {
        @JoinColumn(name = "dictamen", referencedColumnName = "id", insertable = true, updatable = true, nullable = true)})
private Dictamen dictamen;
@Column(name = "fecha_carga")
private Date fechaCarga;
@Column(name = "fecha_mod")
private Date fechaMod;
@Column(name = "usuario_carga")
private String usuarioCarga;
@Column(name = "usuario_mod")
private String usuarioMod;

权宜之计:

@Entity
@Table(name = "expediente")
public class Expediente implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@Column(name = "numero_expediente")
private String numeroExpediente;
@Column(name = "acta_recepcion")
private String actaRecepcion;
@Column(name = "acta_aceptacion")
private String actaAceptacion;
@Column(name = "cartilla_medica")
private String cartillaMedica;
@Column(name = "cartilla_medica_obs")
private String cartillaMedicaObs;
@Column(name = "medico_acepta")
private String medicoAcepta;
@Column(name = "cartilla_notificacion")
private String cartillaNotificacion;
@RestResource(exported=false)
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinColumn(name = "solicitud", referencedColumnName = "id")
private Solicitud solicitud;
@RestResource(exported=false)
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinColumn(name = "franquicia", referencedColumnName = "id")
private Franquicia franquicia;
@RestResource(exported=false)
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinColumn(name = "disposicion", referencedColumnName = "id")
private Disposicion disposicion;
@RestResource(exported=false)
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinColumn(name = "paso", referencedColumnName = "id")
private Paso paso;
@OrderBy(value="dictamen")
@RestResource(exported=false)
@OneToMany(fetch = FetchType.EAGER, mappedBy = "expediente", cascade=CascadeType.ALL)
private Set<ExpedienteDictamen> expedienteDictamen = new HashSet<ExpedienteDictamen>();
@Column(name = "obs_documentacion")
private String obsDocumetacion;
@Column(name = "documentacion")
private Boolean documentacion;
@Column(name = "juntamedica")
private Boolean juntamedica;
@Column(name = "visa_rehabilitacion")
private Boolean visaRehabilitacion;
@Column(name = "visa_dos")
private Boolean visaDos;
@Column(name = "mesa_entradas")
private Boolean mesaEntradas;
@Column(name = "direccion_nacional")
private Boolean direccionNacional;
@Column(name = "finalizado")
private Boolean finalizado;
@Column(name = "fecha_carga")
private Date fechaCarga;
@Column(name = "fecha_mod")
private Date fechaMod;
@Column(name = "usuario_carga")
private String usuarioCarga;
@Column(name = "usuario_mod")
private String usuarioMod;

字典:

@Entity
@Table(name = "dictamen")
public class Dictamen implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@Column(name = "dictamen")
private String dictamen;
@Column(name = "fecha_dictamen")
private Date fechaDictamen;
@Column(name = "numero_dictamen")
private String numeroDictamen;

到目前为止,除了保存 ExpedienteDictamen 之外,一切似乎都运行良好。

这些存储库是使用 JpaRepository 的标准存储库。

当我发布到现有的“ExpedienteDictamen”时,一切正常,但是当我尝试创建一个新的时,它会说:

  Query is: insert into expediente_dictamen (fecha_carga, fecha_mod, usuario_carga, usuario_mod) values (?, ?, ?, ?)
  Query is:
  insert into expediente_dictamen (fecha_carga, fecha_mod, usuario_carga, usuario_mod) values (?, ?, ?, ?)
  2016-08-30 16:17:01.792 DEBUG 30635 --- [nio-8080-exec-5] a.g.s.f.aop.logging.LoggingAspect        : Enter: ar.gob.snr.franquicia.web.rest.errors.ExceptionTranslator.processRuntimeException() with argument[s] = [org.springframework.orm.jpa.JpaSystemException: could not execute statement; nested exception is org.hibernate.exception.GenericJDBCException: could not execute statement]
  2016-08-30 16:17:01.792 DEBUG 30635 --- [nio-8080-exec-5] a.g.s.f.aop.logging.LoggingAspect        : Exit: ar.gob.snr.franquicia.web.rest.errors.ExceptionTranslator.processRuntimeException() with result = <500 Internal Server Error,ar.gob.snr.franquicia.web.rest.errors.ErrorDTO@6a850e14,{}>

有什么想法吗?

**已编辑。

【问题讨论】:

  • 你检查是否连接到数据库?
  • 可能试图将空内容保存到需要内容的任何字段?
  • 是的,因为我可以发布除此之外的任何内容,我什至可以更新一个实际的“ExpedienteDictamen”,我对此不确定。我可能错误地通过了“Expediente”。有什么想法吗?
  • 我尝试用 Dictamen 和 Expediente 将其发布为空白,并且可以正常工作。所以这意味着我没有正确传递这些值。有什么想法吗?
  • 你如何在没有 expediente 和 dictamen 值的情况下创建 ExpedienteDictamen,因为它们不可为空?并且由于这些属性也具有可插入和可更新为 false,因此只能使用 Expediente/Dictamen 实体创建 ExpedienteDictamen 的记录。

标签: java angularjs spring rest


【解决方案1】:

你如何创建没有 expediente 和 dictamen 值的 ExpedienteDictamen,因为它们不可为空?

由于这些属性也具有可插入和可更新为 false,因此可以使用 Expediente/Dictamen 实体创建 ExpedienteDictamen 的记录

【讨论】:

  • 我可以从 expediente 发布并获取“dictamenes”的值以写入数据库,但不能获取“Expediente”的值
  • 我没听懂,我的意思是你不能通过发布 ExpedienteDictamen 实体来更新 ExpedienteDictamen -> expediente 和 dictamen 属性,因为它们被注释为可更新和可插入的 false。
  • 改了,现在测试,没意识到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
相关资源
最近更新 更多