我正在评估这个有前途的fw,当我尝试在子表上创建一行时,我遇到了问题。 BD是postgres 9.2.2.0。这是pojos,没有getter,setter和其他方法:
主要实体ComunidadVecinos
@Entity
@Table(name="COMUNIDADVECINOS")
@View(
name="comunidadvecinos",
members="Datos de la comunidad de vecinos [ refCatastral,cp,ciudad,direccion ]"
)
public class ComunidadVecinos implements java.io.Serializable{
/**
*
*/
private static final long serialVersionUID = 44643628377586114L;
public enum TIPO_COMUNIDAD {URBANA,RUSTICA};
@Id
@Column(length=20,unique=true,nullable=false)
@Required
@Stereotype("RELLENADO_CON_CEROS")
private String refCatastral;
@Column(length=20)
@Required
private String ciudad;
@Column(length=5)
@Required
private String cp;
@Column(length=1)
@Required
private TIPO_COMUNIDAD tipoComunidad;
@Column(length=100)
@Required
private String direccion;
@ReadOnly
@OneToMany(fetch = FetchType.LAZY,
mappedBy = "comunidad",
targetEntity=ViviendasConDeudas.class)
private Collection<ViviendasConDeudas> viviendas = new ArrayList<ViviendasConDeudas>();
另一个主要实体Morosos
@Entity
@Table(name="MOROSO")
@View(
name="comunidadmoroso",
members="Información de morosos [ nifCif, nombreCompleto,tlf,cp, direccion ]"
)
public class Moroso implements Serializable{
private static final long serialVersionUID = -4379659618978530000L;
@Id
@Hidden
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(unique = true, nullable = false)
private Long idMoroso;
@Column(length=9,unique=true)
@Required
@SearchKey
private String nifCif;
@Column(length=11,unique=true)
@Required
@Stereotype("TELEFONO")
private String tlf;
@Column(length=5)
@Required
private String cp;
@Column(length=25)
@Required
private String nombreCompleto;
@Column(length=50)
@Required
private String direccion;
@ReadOnly
@OneToMany(fetch = FetchType.LAZY,
mappedBy = "moroso",
targetEntity=ViviendasConDeudas.class)
private Collection<ViviendasConDeudas> deudas = new ArrayList<ViviendasConDeudas>();
最后是子实体ViviendasConDeudas
,其id是自动生成的,并且与其他主实体有fk。
@Entity
@Table(name="VIVIENDASCONDEUDAS")
@View(
name="ViviendasConDeudas",
members="Viviendas con deudas [ montante,letra,fechaCertificacion,tipo ];descripcion "
)
public class ViviendasConDeudas implements java.io.Serializable{
/**
*
*/
private static final long serialVersionUID = -1711575110204817701L;
public enum TIPOVIVIENDA {PISO,LOCAL};
@Id
@Hidden
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(unique = true, nullable = false)
private Long idDeuda;
@Column(length=50)
@Required
private String descripcion;
@Column(length=10)
@Required
@Stereotype("DINERO")
private BigDecimal montante;
@Column(length=10)
@Required
@Stereotype("FECHAHORA")
@SearchKey
private Date fechaCertificacion;
@Column(length=1)
@Required
@SearchKey
private TIPOVIVIENDA tipo;
@ReadOnly
@ManyToOne(optional=true,fetch=FetchType.LAZY)
@JoinColumn(name="REFCATASTRAL",referencedColumnName="REFCATASTRAL",insertable=true,updatable=true)
@ReferenceView("comunidadvecinos")
//@DescriptionsList(descriptionProperties = "comunidad")
@SearchKey
private ComunidadVecinos comunidad;
@ReadOnly
@ManyToOne(optional=true,fetch=FetchType.LAZY)
@JoinColumn(name="IDMOROSO",referencedColumnName="IDMOROSO",insertable=true,updatable=true)
@ReferenceView("comunidadmoroso")
//@DescriptionsList(descriptionProperties = "moroso")
@SearchKey
private Moroso moroso;
一切都很好,我想,这是来自postgres的生成脚本。
CREATE TABLE viviendascondeudas
(
iddeuda bigserial NOT NULL,
descripcion character varying(50),
fechacertificacion date,
montante numeric(19,2),
tipo integer,
refcatastral character varying(20),
idmoroso bigint,
CONSTRAINT viviendascondeudas_pkey PRIMARY KEY (iddeuda),
CONSTRAINT fk7c51e97d9554972e FOREIGN KEY (idmoroso)
REFERENCES moroso (idmoroso) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk7c51e97db3c86b80 FOREIGN KEY (refcatastral)
REFERENCES comunidadvecinos (refcatastral) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE viviendascondeudas
OWNER TO postgres;
CREATE TABLE comunidadvecinos
(
refcatastral character varying(20) NOT NULL,
ciudad character varying(20),
cp character varying(5),
direccion character varying(100),
tipocomunidad integer,
CONSTRAINT comunidadvecinos_pkey PRIMARY KEY (refcatastral)
)
WITH (
OIDS=FALSE
);
ALTER TABLE comunidadvecinos
OWNER TO postgres;
CREATE TABLE moroso
(
idmoroso bigserial NOT NULL,
cp character varying(5),
direccion character varying(50),
nifcif character varying(9),
nombrecompleto character varying(25),
tlf character varying(11),
CONSTRAINT moroso_pkey PRIMARY KEY (idmoroso),
CONSTRAINT moroso_nifcif_key UNIQUE (nifcif),
CONSTRAINT moroso_tlf_key UNIQUE (tlf)
)
WITH (
OIDS=FALSE
);
ALTER TABLE moroso
OWNER TO postgres;
当我尝试保存子实体时,它给了我一个例外,
java.lang.IllegalArgumentException: argument type mismatch
看起来fw试图在列上传递错误的数据,不是吗?有人能帮助我吗?另一件事是,我没有在hibernate日志中看到任何插入语句。
答案 0 :(得分:1)
Es necesario que suministres masonsinformaciósoobretu caso,porque no se entiende muy bien en que parte delosmódulosgeneradosestásinditandoagregar una entidad hija。
En el modulo Moroso
tu tienes algo como:
@ReadOnly
@OneToMany(fetch = FetchType.LAZY,
mappedBy = "moroso",
targetEntity=ViviendasConDeudas.class)
private Collection<ViviendasConDeudas> deudas = new ArrayList<ViviendasConDeudas>();
Hay varias cosas queobservaraquí,por ejemplo ...estássundaterandoestacolacióncomoReadOnly,por lo que debemos asumir que no esaquídondeintentas agregar el hijo。 OX,funciona de manera diferente en dependencia de como宣布las colecciones y el tipo de relaciones existentes。
考虑到其他人的消息,他们是一名女性人士,他们是一名女性,一名女性,一名女性,一名女子,一名女子,一名女子,一名女子,一名女子,一名女子Padre-Hijos y nunca he usado LAZY enlacolección,respectrando que quiero listar dichos datos(hijos)y OX ya se encarga de hacerlo de la mejor manera。
Además,deberíasinmplificartucódigoinfendoel targetEntity ya que no es necesario cuando tipificastucolección。
Si puedes darnos mayores detalles trataremos de resolver tu problema。
PS:Siestáscomenzandocon OX,te recomiendo que hagas dos simples entidades conunarelaciónPadre-Hijo,con la menor cantidad de propiedades posibles y observa los objetos que se generan en tu DB ylosmódulosqueOX产生cuando accesas las vistas,luego puedes comenzar扩展模块。