使用Spring构造函数的JAVA Rest服务需要有太多参数

时间:2017-05-23 15:56:38

标签: java spring hibernate rest

这里的第一个问题。我目前正在使用Spring Data处理一些Rest服务,一切都运行正常,但我正面临这个问题:

我的一个实体需要有一个22参数构造函数才能工作。它是spring能够正确映射它的唯一方法,如果我尝试解决这个设计错误的构造函数,我会得到以下结果:

无法在类上找到合适的构造函数:com.x.core.model.xxx;嵌套异常是java.lang.IllegalArgumentException:无法在类上找到合适的构造函数:com.x.core.model.xxxx

但是,如果我按原样保留构造函数(带有22个参数),由于构造函数上的参数数量,checklist将引发错误。

我一直在寻找解决方案,但还没有找到解决方案。

请记住,我更改了变量名称以保护公司数据。

由于

@Entity
@IdClass(MYCLASS.class)
@XmlRootElement
@NamedNativeQueries({
    @NamedNativeQuery(name = "MYCLASS.findAll",
            query
            = "SELECT * from table",
            resultClass = MYCLASS.class, resultSetMapping = "MyClassMap"
    )
})
@SqlResultSetMappings({
    @SqlResultSetMapping(name = "MyClassMap",
            classes = {
                @ConstructorResult(targetClass = MYCLASS.class,
                        columns = {
                            @ColumnResult(name = "id", type = Integer.class)//etc... THIS IS CORRECT
                           ,})})
})
public class MYCLASS implements Serializable {

@Id
private Integer paramid;
@Id
private Integer param1;
private String param2;
@Id
private long paramx;
private Integer paramx;
private String paramx;
private Double paramx;
private String paramx;
private Double paramx;
private String paramx;
private String paramx;
private String paramx;
private Double paramx;
private Double paramx;
private Integer paramx;
private Integer paramx;
private Integer paramx;
private Integer paramx;
private Integer paramx;

public MYCLASS(Integer paramx, Integer paramx, String paramx, long paramx, Integer paramx, String paramx, Double paramx, String  paramx, Double paramx, String paramx, String paramx, String paramx, Double paramx, Double paramx, Integer paramx, Integer paramx, Integer paramx, Integer GASTO, Integer paramx) {
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
    this.paramx = paramx;
}//TOO MANY PARAMETERS!!!!!



//getters ,setters, equals and hash

1 个答案:

答案 0 :(得分:0)

知道了! 看来,当您需要非托管实体的resultsetmap时,您可以直接使用@ColumnResult来实现它。这样就可以避免使用构造函数。

@SqlResultSetMappings({
@SqlResultSetMapping(name = "map",
        columns = {
                        @ColumnResult(name = "id", type = Integer.class)})})