用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. A记录、CNAME和URL转发区别

    我们在做域名解析时,尤其是很多虚拟主机,大都会使用到CNAME解析,独立主机.VPS则用A记录较多,而URL转发则会在更换域名时用到,从设置效果来看,都是“解析”到一个“其它”URL地址,而实际上它们 ...

  2. CSS Core Technology

    1. Selector Different types of selectors: Selectors can be divided into the following categories: Si ...

  3. webRTC中音频相关的netEQ(三):存取包和延时计算

    上篇(webRTC中音频相关的netEQ(二):数据结构)讲了netEQ里主要的数据结构,为理解netEQ的机制打好了基础.本篇主要讲MCU中从网络上收到的RTP包是怎么放进packet buffer ...

  4. 非阻塞I/O事件驱动

    在 Java.PHP 或者.net 等服务器端语言中,会为每一个客户端连接创建一个新的线程.而每个线程需要耗费大约 2MB 内存.也就是说,理论上,一个 8GB 内存的服务器可以同时连接的最大用户数为 ...

  5. 一些常用的js循环,如for

    https://blog.csdn.net/u014399368/article/details/82862444

  6. javaweb开发大致流程

  7. celery定时任务

    from celery import Celery from datetime import timedelta app = Celery('gx', broker='redis://localhos ...

  8. Oracle高级查询,over 用法

    注:标题中的红色order by是说明在使用该方法的时候必须要带上order by. 一.rank()/dense_rank() over(partition by ...order by ...) ...

  9. mysql-5.7.20

    . 下载mysql- wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20-linux-glibc2.12-i686.tar. ...

  10. Vue 编程式导航(通过js跳转页面)以及路由hash模式和history模式

    第一种方法: this.$router.push({path:'shopcontent?aid=3'}   第二种方法   this.$router.push({name:'news'}} 通过在ma ...