【问题标题】:JAVA Rest Service with Spring constructor needs to have too many parameters带有 Spring 构造函数的 JAVA Rest Service 需要有太多参数
【发布时间】:2017-05-23 15:56:38
【问题描述】:

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

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

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

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

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

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

谢谢

@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

【问题讨论】:

  • 写默认构造函数public MYCLASS(){}
  • 我已经尝试过了,它会抛出 Could not locate proper constructor on class :S
  • 这不是使用ConstructorResult的结果吗?似乎您的问题源于此。
  • 是的,是的。我将使用 EntityResult 和 ColumnResult 对其进行测试,看看它是否有效。谢谢!

标签: java spring hibernate rest


【解决方案1】:

知道了! 似乎当您需要非托管实体的结果集图时,您可以直接使用 @ColumnResult ,它会起作用。这样您就可以避免使用构造函数。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 2011-04-11
    • 2019-03-02
    相关资源
    最近更新 更多