用jpa写下面语句执行报错,估计要先手动转成字符串吧,工作忙没继续下去了。
public void persist(Goods goods) {
Assert.notNull(goods);
// goods.setId(new Long(1));
List<GoodsItem> goodsItemList = goods.getGoodsItemList(); String jpql ="update Goods goods set goods.goodsItemList = :p1"+
"where goods.id =1";
entityManager.createQuery(jpql).setParameter("p1",goodsItemList).executeUpdate();
}
看到有直接保存一个类实例的方法,直接拿来用了。
@Transactional
public T update(T entity, String... ignoreProperties) {
Assert.notNull(entity);
Assert.isTrue(!entity.isNew());
Assert.isTrue(!baseDao.isManaged(entity)); T persistant = baseDao.find(baseDao.getIdentifier(entity));
if (persistant != null) {
copyProperties(entity, persistant, (String[]) ArrayUtils.addAll(ignoreProperties, UPDATE_IGNORE_PROPERTIES));
}
return update(persistant);
}
/********************************一下为原类*********************************/
@Transactional
public abstract class BaseService<T extends BaseEntity<ID>, ID extends Serializable>{ /** 更新忽略属性 */
private static final String[] UPDATE_IGNORE_PROPERTIES = new String[] { BaseEntity.CREATE_DATE_PROPERTY_NAME, BaseEntity.MODIFY_DATE_PROPERTY_NAME, BaseEntity.VERSION_PROPERTY_NAME }; /** BaseDao */
private BaseDao<T, ID> baseDao; @Autowired
protected void setBaseDao(BaseDao<T, ID> baseDao) {
this.baseDao = baseDao;
} @Transactional(readOnly = true)
public T find(ID id) {
return baseDao.find(id);
} @Transactional(readOnly = true)
public List<T> findAll() {
return findList(null, null, null, null);
} @Transactional(readOnly = true)
public List<T> findList(ID... ids) {
List<T> result = new ArrayList<T>();
if (ids != null) {
for (ID id : ids) {
T entity = find(id);
if (entity != null) {
result.add(entity);
}
}
}
return result;
} @Transactional(readOnly = true)
public List<T> findList(Integer count, List<Filter> filters, List<Order> orders) {
return findList(null, count, filters, orders);
} @Transactional(readOnly = true)
public List<T> findList(Integer first, Integer count, List<Filter> filters, List<Order> orders) {
return baseDao.findList(first, count, filters, orders);
} @Transactional(readOnly = true)
public Page<T> findPage(Pageable pageable) {
return baseDao.findPage(pageable);
} @Transactional(readOnly = true)
public long count() {
return count(new Filter[] {});
} @Transactional(readOnly = true)
public long count(Filter... filters) {
return baseDao.count(filters);
} @Transactional(readOnly = true)
public boolean exists(ID id) {
return baseDao.find(id) != null;
} @Transactional(readOnly = true)
public boolean exists(Filter... filters) {
return baseDao.count(filters) > 0;
} @Transactional
public T save(T entity) {
Assert.notNull(entity);
Assert.isTrue(entity.isNew()); baseDao.persist(entity);
return entity;
} @Transactional
public T update(T entity) {
Assert.notNull(entity);
Assert.isTrue(!entity.isNew()); if (!baseDao.isManaged(entity)) {
T persistant = baseDao.find(baseDao.getIdentifier(entity));
if (persistant != null) {
copyProperties(entity, persistant, UPDATE_IGNORE_PROPERTIES);
}
return persistant;
}
return entity;
} @Transactional
public T update(T entity, String... ignoreProperties) {
Assert.notNull(entity);
Assert.isTrue(!entity.isNew());
Assert.isTrue(!baseDao.isManaged(entity)); T persistant = baseDao.find(baseDao.getIdentifier(entity));
if (persistant != null) {
copyProperties(entity, persistant, (String[]) ArrayUtils.addAll(ignoreProperties, UPDATE_IGNORE_PROPERTIES));
}
return update(persistant);
} @Transactional
public void delete(ID id) {
delete(baseDao.find(id));
} @Transactional
public void delete(ID... ids) {
if (ids != null) {
for (ID id : ids) {
delete(baseDao.find(id));
}
}
} @Transactional
public void delete(T entity) {
if (entity != null) {
baseDao.remove(baseDao.isManaged(entity) ? entity : baseDao.merge(entity));
}
} /**
* 拷贝对象属性
*
* @param source
* 源
* @param target
* 目标
* @param ignoreProperties
* 忽略属性
*/
protected void copyProperties(T source, T target, String... ignoreProperties) {
Assert.notNull(source);
Assert.notNull(target); PropertyDescriptor[] propertyDescriptors = PropertyUtils.getPropertyDescriptors(target);
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
String propertyName = propertyDescriptor.getName();
Method readMethod = propertyDescriptor.getReadMethod();
Method writeMethod = propertyDescriptor.getWriteMethod();
if (ArrayUtils.contains(ignoreProperties, propertyName) || readMethod == null || writeMethod == null || !baseDao.isLoaded(source, propertyName)) {
continue;
}
try {
Object sourceValue = readMethod.invoke(source);
writeMethod.invoke(target, sourceValue);
} catch (IllegalAccessException e) {
throw new RuntimeException(e.getMessage(), e);
} catch (IllegalArgumentException e) {
throw new RuntimeException(e.getMessage(), e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
} }
												

hibernate写list到mysql的更多相关文章

  1. Robotframework使用自写库连接mysql数据库

    Robotframework使用自写库连接mysql数据库 新建库文件mysqltest.py 代码如下: # -*- coding: utf-8 -*- import MySQLdbimport o ...

  2. Hibernate原生SQL映射MySQL的CHAR(n)类型到String时出错

    今天在用Hibernate通过原生SQL和ResultTransformer映射时,出现数据类型不匹配的错误.但是通过Entity映射,没有问题.在网上找了好多答案,终于解决了. 核心代码: Stri ...

  3. Hibernate写配置文件无提示信息解决

    把Hibernate的相关jar包引入工程后,在配置hibernate.cfg.xml时没有提示信息,对于开发人员来说,那么多标签,标签有那么多属性,全部都记住显然是不可能的,遇到这种情况是很头疼的事 ...

  4. hibernate 解决诡异的mysql存入中文乱码

    使用hibernate查询mysql,通过bean的get方法拿到字符串再写入mysql中的字段会中文乱码,需要String string = xxx.get(),把get方法拿到的值传入到新的str ...

  5. 用if写一个备份mysql的脚本

    #!/bin/bash # 备份数据库 BAK_DIR=/data/backup/`date +%Y%m%d` MYSQLDB=dexin MYSQLUSER=root MYSQLPW=123456 ...

  6. Hibernate写hql语句与不写hql语句的区别?

    写hql语句与不写hql语句的区别? 写hql语句:书写HQL语句,所有的查询与投影的设计均使用HQL语句完成. 不写hql语句:没有任何查询语句,所有的查询与投影的设计使用面向对象格式完成. 二者选 ...

  7. STS 3.6.4 SpringMVC 4.1.6 Hibernate 4.3.8 MySQL

    开发环境: Java 1.8 Spring Tool Suite 3.6.4 Spring faramework 4.1.6 Hibernate 4.3.8 Maven 2.9 数据库是MySQL 5 ...

  8. hibernate保存数据到mysql时的中文乱码问题

    因为hibernate底层使用的是jdbc的技术,所以我参考了别人使用jdbc保存数据到mysql里面时解决乱码问题的方法! 首先要告诉数据库要插入的字符串的字符集,mysql 默认使用的字符集是 l ...

  9. python写的分析mysql binlog日志工具

    因为数据库增删改突然暴增,需要查询是那些表的操作特别频繁,写了一个用来分析bin-log的小工具,找出增删改查的表,并按照操作次数降序排列,以下是代码: 1 2 3 4 5 6 7 8 9 10 11 ...

随机推荐

  1. nginx的autoindex,目录浏览,配置和美化,美观的xslt_stylesheet

    nginx的autoindex,目录浏览,配置和美化,美观的xslt_stylesheet Nginx custom autoindex with XSLT 转载注明来源: 本文链接 来自osnosn ...

  2. XPath定位时,使用文本的方法小技巧。

    1)//td[text()= "{0}" ]  #这是一种非常常用的定位方法,具体例子使用如下: __keyboard = '//td[text()= "{0}" ...

  3. mybatis缓存的设计

    继续用提问的方式来看Mybatis的缓存设计. 1.Mybatis如何开启缓存 Mybatis对查询结果进行缓存,所以缓存的对象为具体的Statement 通过在Statement上是否使用缓存来启用 ...

  4. Why Lua?

    Why Lua? 最近在很多的地方都遇到了lua这个东西,于是想一探究竟,为什么这么多的游戏前端都用了Lua脚本呢? 于是乎简单的看了一下Lua,目前总结出来了几点~ 还是先放上资源: GitHub上 ...

  5. 自学大数据(hadoop)小插曲__虚拟机工具

    安装VMware Tools VMware 版本:10.0.1 ubuntu(linux) 版本:16.04 LTS 序言:本来第一天可以访问共享文件夹,第二天重新安装了四个ubuntu,可惜确无法访 ...

  6. pycharm 激活码

    http://www.cnblogs.com/itfat/p/9388829.html

  7. C# 控件之数据绑定

    增加一个委托方法,可以实现后台多线程直接更新UI界面的值,利用了控件的DataBindings,以及 INotifyPropertyChanged接口和事件委托机制. 如果只是通过INotifyPro ...

  8. redis哨兵架构的基础知识及部署和管理

    一.前言 1.哨兵的介绍 sentinal,中文名是哨兵 哨兵是redis集群架构中非常重要的一个组件,主要功能如下 ()集群监控,负责监控redis master和slave进程是否正常工作 ()消 ...

  9. mybatis入门篇:Mybatis注解方式的基本用法

    @Select 1.mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <! ...

  10. vue登录注册及token验证

    // router.jsimport Vue from 'vue'import VueRouter from 'vue-router' Vue.use(VueRouter) const routes ...