Problema para realizar um mapeamento[Resolvido]

Por favor, comentem!

Gostaria de mapear o seguinte relacionamento usando JPA,

Como podem ver, empresa e funcionário possuem um fk para endereco,
preciso que, ao adicionar um novo funcionário ou empresa, um registro na tabela endereco seja criado e que a
fk da tabela empresa ou endereco aponte para esse endereco.

public class Empresa{
	@OneToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "ID_EMPRESA")
	private Endereco endereco = new Endereco();
}
public class Endereco{
	@Column(nullable = false, length = 45)
	private String bairro;

	@Column(nullable = false, length = 8)
	private String CEP;

	@Column(nullable = false, length = 45)
	private String cidade;

	@Column(nullable = false, length = 45)
	private String complemento;

	@Enumerated(EnumType.STRING)
	@Column(nullable = false)
	private EstadoEnum estado;

	@Id
	@Column(name = "ID_ENDERECO")
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
}

da forma como esta mapedo, o hibernate primeiro tenta incluir a empresa para depois incluir o endereço,
por conta disso recebo o seguinte erro na tabela empresa,

10:22:38,288 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
java.sql.SQLException: Field 'ID_ENDERECO' doesn't have a default value

Preciso que o hibernate inclua primeiro o endereco e depois a empresa.

O problema era de escrita,

Errado:

public class Empresa{
	@OneToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "ID_EMPRESA")
	private Endereco endereco = new Endereco();
}

Correto:

public class Empresa{
	@OneToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "ID_ENDERCO")
	private Endereco endereco = new Endereco();
}

Fiz um Projeto que tinha estes relacionamentos,

As classes ficaram assim.

@Entity
@Table(name="enderecos", schema="public")
public class Endereco {

	@OneToOne(mappedBy="endereco")
	private Funcionario funcionarios;

	
	@OneToOne(mappedBy="endereco")
	private Empresa empresas;
}
@Entity
@Table(name="empresas", schema="public")
public class Empresa {

@OneToOne(cascade = CascadeType.ALL)
	@JoinColumn(name="enderecos_id_enderecos")
	private Endereco endereco;
}
@Entity
@Table(name="funcionarios", schema="public")
public class Funcionario {

@OneToOne(cascade = CascadeType.ALL)
	@JoinColumn(name="enderecos_id_enderecos")
	private Endereco endereco;
}

espero que tenha ajudado.