我试图更新一个实体与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);
}
谢谢
您的参数@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和我给出了相反的值。我很清楚,在我上了它之后,我会有一个问题的日期,所以答案确实帮助了我。谢谢大家!