Not to downplay what may be a legitimate bug here... but I can't help but wonder why you're modeling your classes in this way. If insuranceNumber and state are specific to an individual (due to the fact that the columns exist in the "persons" table) then why would you place these in the component class? If these properties are specific to an instance of HealthCare then I would expect them to exist in a joined table ("healthcare" or whatever) with "doctorVisits" having a foreign key reference to "healthcare" (rather than "persons").
If your requirements are simply to display a list of "doctorVisits" for an individual (assuming they have only one insurance provider), then you might want to move the state and insuranceNumber properties to Person and try something along the lines of:
Code:
<class name="Person" table="persons" >
<id name="id" column="id" type="int" access="field">
<generator class="increment" />
</id>
<property name="state" column="health_state" type="String" />
<property name="insuranceNumber" column="insurance_number" type="long" />
<list name="doctorVisits">
<key column="person_id" />
<list-index column="queue_index" base="0"/>
<one-to-many class="DoctorVisit" />
</list>
</class>
If the reason for structuring your classes like this is to allow for an HQL query involving state and insuranceNumber from DoctorVisit, then add a bidirectional association from DoctorVisit to person and reference the properties as doctorVisit.person.insuranceNumber, doctorVisit.person.state, etc.
Code:
<class name="DoctorVisit" table="doctor_visits">
<id name="id" column="id" type="int" access="field">
<generator class="increment" />
</id>
<many-to-one name="person" column="person_id" not-null="true"/>
...
</class>
And by the way... if insurance_number is a nullable column in your table then you should most definitely declare this as a Long rather than a primitive (considering null cannot be assigned to a primitive).