In the article mapping shouldn't it be a mapping to the TAG not the article?
Code:
<many-to-one name="tag"
class="com.Tag" cascade="save-update" unique="true">
<column name="TAG_ID" not-null="true" />
</many-to-one>
And, this WILL work. The question is how are you retrieving the article? If you retrieve the article again, the tag property will be set as it was persisted. Then when you save it again, it will not insert a new one. If you create a new tag object and set it for the article, a new tag will be inserted when the article is saved.