package org.ovirt.engine.core.dao.images; import java.util.List; import org.hibernate.Query; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.image_vm_map; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.BaseDAOHibernateImpl; /** * <code>DiskImageDAOHibernateImpl</code> performs persistence operations on instances of {@link DiskImage} using * Hibernate. * */ public class DiskImageDAOHibernateImpl extends BaseDAOHibernateImpl<DiskImage, Guid> { public DiskImageDAOHibernateImpl() { super(DiskImage.class); } @SuppressWarnings("unchecked") public List<DiskImage> getAllForVm(Guid id) { Query query = getSession().createQuery("select image from DiskImage image, " + "image_vm_map ivmap " + "where ivmap.id.imageId = image.id " + "and ivmap.id.vmId = :vm_id"); query.setParameter("vm_id", id); return fillInDetails(query.list()); } private List<DiskImage> fillInDetails(List<DiskImage> images) { for (DiskImage image : images) { Query query = getSession().createQuery("from image_vm_map where id.imageId = :image_id"); query.setParameter("image_id", image.getId()); image_vm_map result = (image_vm_map) query.uniqueResult(); if (result != null) { image.setactive(result.getactive()); image.setvm_guid(result.getvm_id()); } } return images; } public List<DiskImage> getAllSnapshotsForParent(Guid id) { return fillInDetails(findByCriteria(Restrictions.eq("parentId", id))); } public List<DiskImage> getAllSnapshotsForStorageDomain(Guid id) { return fillInDetails(findByCriteria(Restrictions.eq("storage_id", id))); } public List<DiskImage> getAllSnapshotsForVmSnapshot(Guid id) { return fillInDetails(findByCriteria(Restrictions.eq("vm_snapshot_id", id))); } public List<DiskImage> getAllSnapshotsForImageGroup(Guid id) { return fillInDetails(findByCriteria(Restrictions.eq("image_group_id", id))); } public void removeAllForVmId(Guid id) { Query query = getSession().createQuery("delete from DiskImage i " + "where i.id = (select ivmap.id.imageId from image_vm_map ivmap where ivmap.id.vmId = :vm_id)"); query.setParameter("vm_id", id); Transaction transaction = getSession().beginTransaction(); query.executeUpdate(); transaction.commit(); } }