Hibernate ManyToOne não salva (typeMismatch)

Ola, estou tentando salvar um registro com relação ManyToOne (sou iniciante), porém o formulário é retornado da validação apresentando erro typeMismatch no campo referenciado da outra tabela, se eu retiro a validação o registro principal salva, porém o campo da FK fica null, segue meu código:
Modelo de Empresa

 @Entity
public class Empresa {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String nome;

@OneToMany(mappedBy = "empresa")
private List<Filial> filiais; 

public Long getId() {return id;}
public String getNome() {return nome;}
public List<Filial> getFiliais() {return filiais;}

public void setId(Long id) {this.id = id;}
public void setNome(String nome) {this.nome = nome;}
public void setFiliais(List<Filial> filiais) {this.filiais = filiais;}

}
Modelo Filial

@Entity
public class Filial {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String nome;

@ManyToOne(fetch = FetchType.EAGER)
@PrimaryKeyJoinColumn
private Empresa empresa;

public Long getId() {return id;}
public String getNome() {return nome;}
public Empresa getEmpresa() {return empresa;}

public void setId(Long id) {this.id = id;}
public void setNome(String nome) {this.nome = nome;}
public void setEmpresa(Empresa empresa) {this.empresa = empresa;}

}
Meu controler:

@Controller
public class FilialController {
@Autowired
	private FilialDAO filialDAO;
@Autowired
	private EmpresaDAO empresaDAO;
....
}
@RequestMapping(value="/save", method = RequestMethod.POST)
	public ModelAndView add(@Valid Filial filial, BindingResult result, RedirectAttributes redirectAttributes) {
		if(result.hasErrors()) {
			return add(filial);
		}
		filialDAO.save(filial);
		redirectAttributes.addFlashAttribute("message", "Filial criada com Sucesso");
		return new ModelAndView("redirect:/sys/filial/all");
	
	}

Filial DAO:

@Repository
@Transactional
public class FilialDAO {

	@PersistenceContext
	private EntityManager manager;
	
	public void save(Filial filial){
		manager.persist(filial);
	}

No meu jsp estou usando o campo assim:

<label class="labelForm" for="empresa">Empresa*</label>
<form:select path="filial.empresa" items="${empresas}" itemLabel="nome" itemValue="id" />

Ele carregas as empresas no select normal, acho que deve ser erro simples, mais não consigo identificar…

Dá alguma exceção?