当前位置: 首页 > 知识库问答 >
问题:

自定义查询参数值[2]与预期类型不匹配

米修平
2023-03-14

我试图更新一个实体与OneToOne关系使用restful Web服务。

我使用自定义查询,但它不工作

@Modifying
@Query("UPDATE Activity a SET a.type = :type WHERE a.id = :uuid")
int setType(@Param("uuid") UUID uuid, @Param("type") long type);

错误:

java.lang.的参数值[2]不匹配预期的类型[com.mezoo.tdc.model.ActivityType(n/a)]

活动豆

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

   @Id
   @GeneratedValue(generator = "uuid")
   @GenericGenerator(name="uuid", strategy = "uuid2")
   @Column(name = "uuid", nullable = false, unique = true, columnDefinition = "BINARY(16)")
   private UUID uuid;

   @OneToOne(fetch = FetchType.EAGER, cascade={CascadeType.MERGE})
   @JoinColumn(name="type", nullable = false)
   private ActivityType type;

豆子

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

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(nullable = false, unique = true)
    private String code;

    @Column(nullable = false)
    private String label;

它是可能的更新没有自定义查询?我想使用下面的POST请求:

{"uuid":"9d9fa946-ee6e-408e-9e8a-7a9786a1d362","label":"ACTIVITY", "type":{"id":2}}

使现代化

活动存储库:

@Transactional
public interface ActivityDao extends CrudRepository<Activity, UUID> {

@Modifying
@Query("UPDATE Activity a SET a.type = :type WHERE a.uuid = :uuid")
int updateType(@Param("uuid") UUID uuid, @Param("type") ActivityType type);
}

活动服务:

@Service
public class ActivityService implements EntityService<Activity,UUID> {
private static final Logger LOGGER = LoggerFactory.getLogger(ActivityService.class);
    @Override
    public Activity update(Activity activity) {
    LOGGER.info("Update ",activity);
    Activity updated = activityDao.findOne(activity.getUuid());
    if(updated==null) throw new ResourceNotFoundException();

    if (activity.getType().getId()!= updated.getType().getId()) {
        LOGGER.info("Update ActivityType for Activity "+activity.getUuid(),activity);

        activityDao.updateType(updated.getUuid(),activity.getType());
    }
    updated.setLabel(activity.getLabel());
    updated.setDetails(activity.getDetails());

    return activityDao.save(updated);
}

谢谢

共有1个答案

梅逸清
2023-03-14

您的参数@Param(“type”)long type错误!它应该是@Param(“type”)ActivityType类型。

 类似资料:
  • 问题内容: 我收到以下错误 java.lang.IllegalArgumentException: Parameter value [2] did not match expected type [com.cityBike.app.model.User (n/a)] at org.hibernate.jpa.spi.BaseQueryImpl.validateBinding(BaseQueryIm

  • 我收到的错误是 java.lang.IllegalArgumentException:参数值[2]与org.hibernate.jpa.spi.basequeryimpl.validateBinding(basequeryimpl.java:885)org.hibernate.jpa.internal.queryimpl.access$000(queryimpl.java:80)org.hiber

  • 它打印出值的等效,这是因为这一行: 通过调用表示。 那么,如何使Hibernate相信是的实例? 我的枚举是由加载的。而由URLClassLoader加载,由另一个类加载器加载。

  • 当我想跑的时候: 我得到: 执行操作“MappingAddAction”的服务异常,java.lang.IllegalArgumentException:参数值[5118]与预期的类型[com.vernuso.trust.server.domain.ClientImport.MappingInfo(N/A)]不匹配 有人能帮助我理解为什么它需要类型而不是类型吗? 我有两个表,如下图所示。Mappi

  • 我试图在QueryDSL4.1.4中运行带有子查询的查询。版本3.x中的等价物起作用了,但我似乎无法在版本4.1.4中使其起作用。不确定是我漏了什么还是有个bug。感谢任何输入! 下面是相关代码: 似乎整个子查询都被设置为参数,而Hibernate对此并不满意。是否应该使用不同的QueryDSL语法来避免此问题?

  • 我做错了什么? 正在更新: 我发现了问题所在。问题与ActionRepository中找到的函数有关。函数的签名首先要求两个日期进行比较,然后id和我给出了相反的值。我很清楚,在我上了它之后,我会有一个问题的日期,所以答案确实帮助了我。谢谢大家!