Cascading options for updating parent-child entity

Getting following error while updating the parent Entity :
Note that there is no error while persisting new Parent-child Entity, error occurs only while merge operation.

org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing :

Here is my Entity structure :

	public class Vendor implements Serializable {

		private static final long serialVersionUID = 4681697981214145859L;

		@Id
		@GeneratedValue(strategy = GenerationType.IDENTITY)
		@Column(name = "vendor_id")
		private Long vendorId;

		@Column(name = "biz_type")
		private String bizType;
		
		...
		
		@OneToMany(mappedBy = "vendor", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
		private Set<VendorAddress> vendorAddresses;
	}
		
	> public class VendorAddress implements Serializable {

		private static final long serialVersionUID = 227762450606463794L;

		@Id
		@GeneratedValue(strategy = GenerationType.IDENTITY)
		@Column(name = "vendor_adrs_id")
		private Long vendorAdrsId;
		
		@Column(name = "vend_adrs_ordinal")
		private Integer vendAdrsOrdinal;

		// bi-directional many-to-one association to City
		@ManyToOne(fetch = FetchType.EAGER)
		@JoinColumn(name = "city_id")
		private City city;

		// bi-directional many-to-one association to State
		@ManyToOne(fetch = FetchType.EAGER)
		@JoinColumn(name = "state_id")
		private State state;

		// bi-directional many-to-one association to Country
		@ManyToOne(fetch = FetchType.EAGER)
		@JoinColumn(name = "country_id")
		private Country country;

		....
		
		// bi-directional many-to-one association to Vendor
		@ManyToOne(fetch = FetchType.LAZY)
		@JoinColumn(name = "vendor_id")
		private Vendor vendor;
	}

Using DTO to send data over network to client and Dozer Mapping tool for copying data from Entities to DTO.

Here is EJB method to persist Vendor and it’s address. The Cascade option is set to CascadeType.PERSIST and hence the child entity VendorAddress is also saved alongwith parent entity Vendor.
// New vendor is being persisted without any errors.

	@Override
 	public VendorTO saveVendor(VendorTO vendorTo) throws ErpMiniAppException {
 		
 		if (vendorTo.getVendorAddresses() != null) {
 			Iterator<VendorAddressTO> iter = vendorTo.getVendorAddresses().iterator();
 			if (iter.hasNext()) {
 				VendorAddressTO addressTo = iter.next();
 				addressTo.setVendAdrsOrdinal(1); // for new Vendor, the address ordinal starts with 1
 			} else
 				throw new ErpMiniAppException("Address details no associated with Vendor.");
 		} else {
 			throw new ErpMiniAppException("Address details no associated with Vendor.");
 		}
 		
 		Vendor vendor = (Vendor) ErpMiniMapper.getEntity(vendorTo, new Vendor());
 		Vendor persistedVendor = daoFactory.getVendorDAO().insert(vendor);
 		_logger.debug("InventoryServiceImpl :: saveVendor() new Entity inserted success!");
 		return (VendorTO) ErpMiniMapper.getTO(persistedVendor, new VendorTO());
 	}
EJB method to update Vendor and it's address. The Cascade option is set to CascadeType.MERGE, but throwing exception during committing a transaction.
    @Override
	public VendorTO updateVendor(VendorTO vendorTo) throws ErpMiniAppException {
		_logger.debug("VendorTO details to be updated -> " + vendorTo.toString());
		Vendor vendor = (Vendor) ErpMiniMapper.getEntity(vendorTo, new Vendor());
		Vendor updatedVendor = daoFactory.getVendorDAO().update(vendor);
		_logger.debug("Entity updated success!");
		return (VendorTO) ErpMiniMapper.getTO(updatedVendor, new VendorTO());
	}

Caused by: java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.itsys.erp.server.dal.entities.VendorAddress.vendor -> com.itsys.erp.server.dal.entities.Vendor.

So I check whether the collection VendorAddress is empty or not and is present in the parent entity Vendor.
Child entity VendorAddress is present in parent entity Vendor as you can see both Primary Keys are present : vendor_id-> 9 and vendor_address_id-> 28.
Here is log debug info :

InventoryServiceImpl.java:265) - VendorTO details to be updated -> vendor_id-> 9 name-> Tetra Pak India Pvt. Ltd. email -> info.us@tetrapak.com phone -> 02135 678 101 / 1800 1555 4488 biz type-> MFG vendor code-> tetrapak Address Details ->
19:14:46,860 INFO  [stdout] (default task-1)  vendor_address_id-> 28 ordinal-> 1 vendor Address Type-> Manufacturing address_1-> Plot No 53, MIDC Chakan Phase 2, address_2-> Village Vasuli, Tal Khed, contact-> 02135 678101 / 02135 661801 vendor email ID-> info.us@tetrapak.com vendor info->

Tried with cascading option CascadeType.ALL, getting same exception.
What is causing the exception to mark it as transient entity?