Duvida na parte teorica sobre o hibernete

Pessoal, estou fazendo um programa com hibernet e netbeans, um sistema de cadastro igual a
um de biblioteca.
Eu ate perguntei aqui no forum sobre como fazer uma pesquisa por letra caso queira achar um
titulo pelo nome por exemplo. E disseram que tenho que mapear no hibernete. Ok
Fui dar uma olhada no Hibernete referencia e achei como fazer o mapeamento

<hibernate-mapping>
<class name="events.Person" table="PERSON">
<id name="id" column="PERSON_ID">
<generator class="native"/>
</id>
<property name="age"/>
<property name="firstname"/>
<property name="lastname"/>
</class>
</hibernate-mapping>

*exemplo do hibernete referencia e nao do meu programa.

Bom, a minha duvida fica a seguinte…o meu programa tem essa classe

package events;
public class Person {
private Long id;
private int age;
private String firstname;
private String lastname;
public Person() {}
// Accessor methods for all properties, private setter for 'id'
}

*novamente exemplo do hibernete

A persistencia

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="EmpresaPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
     <properties>
       <property name="hibernate.connection.username" value="postgres"/>
       <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
       <property name="hibernate.connection.password" value="******"/>
      <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/teste"/>
       <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
       <property name="hibernate.hbm2ddl.auto" value="update"/>
     </properties>
   </persistence-unit>
 </persistence>

E o codigo no netbeans com campos jfieldtxt e etc. E esta funcionando perfeitamente.

Bom, como comentado, tenho que criar o tal mapping como no 1 exemplo acima. Se o meu programa esta
funcionando(cadastra, salva no postgres) qual o motivo de eu mapear? Para que serve o “hibernate mapping”?
E tambem estava vendo o hibernete-util tb…

Li, e procurei na net, mas ainda nao caiu a ficha. Se alguem poder explicar de uma forma menos tecnica eu
agradeço…

Obrigado!