I found a working solution. As I mentioned earlier, I'm not allowed to modify the Vehicle and Weapon entities and the corresponding mapping files. Not even a single annotation is allowed.
I found this answer by Googling Ben's suggestion above which lead me to these articles:
http://www.mkyong.com/hibernate/hibernate-one-to-one-relationship-example/
and http://www.vaannila.com/hibernate/hibernate-example/hibernate-mapping-one-to-one-1.html
The suggestion from mkyong is good but I didn't like the idea of keeping and assigning primary keys both ways as I have no way of editing the mapping files from the Vehicle and Weapon classes. See the comment "the main difficulty with one-to-one relationship is ensuring both are assigned the same primary key"
The suggestion from vaannila is somehow intriguing. It does a one-to-one relationship but without requiring any edits on other mapping files.
First, I declared my VehicleWeapon.hbm.xml as follows:
<hibernate-mapping package="com.armory">
<id name="id" type="long" >
<column name="id" />
<generator class="native" />
</id>
<many-to-one name="vehicle" class="Vehicle"
column="vehicle_column" cascade="all" unique="true" />
<many-to-one name="weapon" class="Weapon"
column="weapon_column" cascade="all" unique="true" />
Then I declared my standard VehicleWeapon POJO class. And the corresponding DAO implementation.
I run a couple of Junit/Spring tests. I was able to save, delete, retrieve without problems. All actions cascade to the corresponding Weapon and Vehicle tables.
The only downside with this method is Hibernate will create a third table vehicle_weapon that contains the id for the vehicle and weapon tables respectively as a reference.
The good thing is I didn't edit any existing entities or mapping files. I created a new one and compose a new object from two tables.
I still like to be able to map directly to the Weapon and Vehicle's properties instead of mapping directly to the Weapon and Vehicle entities. But for now, I think this is acceptable.