Hibernate Relacionamento ManyToOne com chave estrangeira nula não persiste

Bom dia Pessoal.
Eu sou novo no uso do Hibernate e estou encontrando problemas na persistência dos dados em meu projeto.
Eu tenho duas classes Cidades e Clientes.
Na classe cliente possui um atributo do tipo Cidade com relacionamento ManyToOne, quando peço para persistir os dados se informo a cidade no cadastro de clientes, salva normalmente, porém, quando não seleciono a cidade no cadastro de clientes lança a seguinte exceção:

org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : br.com.newidea.models.Cliente.cidade -> br.com.newidea.models.Cidade; nested exception is java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : br.com.newidea.models.Cliente.cidade -> br.com.newidea.models.Cidade

Abaixo segue o código das entidades:

@Entity
@Table(name=“T_CIDADES”)
public class Cidade {

@Id
@GeneratedValue
private Integer id;

@NotEmpty
@Size(min=5, max=60)
private String nome;

@Pattern(regexp="^\\d{5}[-]\\d{3}$")
private String cep;

@NotEmpty
private String estado;

// get and setters
}

@Entity
@Table(name = “T_CLIENTES”)
public class Cliente {

@Id
@GeneratedValue
private Integer id;

@NotEmpty
@Size(min=5, max=60)
private String nome;

private String endereco;


private String numero;


private String bairro;

@ManyToOne(optional=true)     
@JoinColumn(name="cidade", referencedColumnName="id")  
private Cidade cidade;    

// get and setters

}

Alguém poderia me ajudar a resolver esse problema?

Obrigado.

Subsitui essa linha

@ManyToOne(optional=true,cascade = CascadeType.ALL)

Krismorte, obrigado pela ajuda, mas agora está dando um novo erro.
Quando cadastro o cliente sem a cidade ele lança a seguinte exceção:

javax.validation.ConstraintViolationException: Validation failed for classes [br.com.newidea.models.Cidade] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage=‘may not be empty’, propertyPath=nome, rootBeanClass=class br.com.newidea.models.Cidade, messageTemplate=’{org.hibernate.validator.constraints.NotEmpty.message}’}
ConstraintViolationImpl{interpolatedMessage=‘may not be empty’, propertyPath=estado, rootBeanClass=class br.com.newidea.models.Cidade, messageTemplate=’{org.hibernate.validator.constraints.NotEmpty.message}’}
]

é como se ele quisesse cadastrar junto a cidade.
Tem alguma coisa a mais que devo fazer?

Obrigado.

Certo, primeiramente a primeira questão foi respondida então marque à como resposta.

Você tem que entender melhor o JPA.

Se a cidade sempre for cadastrada junto do Cliente mantenha a resposta que dei inicialmente.

Caso exista mesmo a possibilidade do cliente ser cadastrado independete da Cidade volte o script a forma inicia.
Fazendo essa última opção toda vez que seu cliente for cadastrado você terá que buscar a cidade do bando de dados e passar referência ao cliente. Caso a cidade não exista a mesma deverá ser persistida no banco de dados antes de ser passada como referência.

Tranquilo :smiley:

JPA
http://uaihebert.com/jpa-mini-livro-primeiros-passos-e-conceitos-detalhados/