Como mapea uma coleção com hibernate anotation

pessoal faz um tempão que estou apanhando com esse hibernate
alguem pode me ajuda como mapea uma coleção.
segui os passo do manual de referencia mais toda vez da o seguinte erro.

1159 [main] INFO org.hibernate.impl.SessionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured
Hibernate:
insert
into

Order (customer_id
, number) 

values
(?, ?)
1231 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1064, SQLState: 42000
1231 [main] ERROR org.hibernate.util.JDBCExceptionReporter - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘Order (customer_id, number) values (1, ‘2’)’ at line 1

aqui esta minha classes.

@Entity
public class Order {
   @Id @GeneratedValue public Integer getId() { return id; }
   public void setId(Integer id) { this.id = id; }
   private Integer id;
   public String getNumber() { return number; }
   public void setNumber(String number) { this.number = number; }
   private String number;
   @ManyToOne
   public Customer getCustomer() { return customer; }
   public void setCustomer(Customer customer) { this.customer = customer; }
   private Customer customer;
}

@Entity  
public class Customer {
   @Id @GeneratedValue public Integer getId() { return id; }
   public void setId(Integer id) { this.id = id; }
   private Integer id;
   @OneToMany(mappedBy="customer")
   //@OrderColumn(name="orders_index")
   public List<Order> getOrders() { return orders; }
   public void setOrders(List<Order> orders) { this.orders = orders; }
   private List<Order> orders;
}
public class NewClass {

    public static void main(String[] agrs) {
  
try {
             AnnotationConfiguration cfg = new AnnotationConfiguration();
             cfg.addAnnotatedClass(Customer.class);
             cfg.addAnnotatedClass(Order.class);
             SessionFactory fabrica = cfg.buildSessionFactory();
             Session sessao = fabrica.openSession();
             Transaction tx_Customer = sessao.beginTransaction();

        Customer c = new Customer();
        Order o = new Order();
        
        o.setId(1);
        o.setNumber("1");
        o.setCustomer(c);

        o.setId(2);
        o.setNumber("2");
        o.setCustomer(c);
        


        List<Order> lista = new ArrayList();
        lista.add(o);

        c.setId(1);
        c.setOrders(lista);
        
             sessao.save(c);

             tx_Customer(.commit();
             sessao.close();
       
        } catch (Exception e) {
        }


    }
}

Só para efeito de teste, você pode tentar usando um nome diferente de “Order” ? É que order é palavra reservada do sql então pode ser que o mysql esteja interpretando como um comando ao invés de uma tabela.

Eu não lembro qual é o default, mas pode ser necessário também configurar o cascade para persist, caso queira que ao salvar a entidade principal ele salve também as associadas. Caso contrário precisará salvar individualmente e só no final chamar o commit.

Você deve especificar a coluna de junção da tabela, no many-to-one.

@ManyToOne @JoinColumn(name="colunajuncao") public Customer getCustomer() { return customer; }

Só para explicar melhor…

Como você não avisou o Hibernate qual é a coluna que contem a FK, ele tentou o nome da entidade “costumer” mais “_” mais “id”. Tentando, então, “costumer_id”. Provavelmente não é essa a coluna FK, então você deve avisá-lo qual é através de @JoinColumn.