OneToMany Bidirecional não cria relacionamento na tabela!

Já tentei de várias formas o relacionamento bidirecional do OneToMany do jpa, mas sem muito sucesso…
bom, o que ocorre é o seguinte, tenho duas classes, Ocorrencia e MaterialApreendido, primeiramente a ocorrência é criada, e depois adiciono os materiais, porém ao adicionar um material e setar a chave estrangeira passando a ocorrência não aparece nenhum erro e mesmo assim a chave estrangeira não é setada. help.

Ocorrência.class

@Entity
@Table(name = "OCORRENCIA")
@NamedQuery(name = "Ocorrencia.buscarOcorrenciaPorIdComMateriais", query = "select o from Ocorrencia o left join fetch o.materiais where o.id_ocorrencia = :id_ocorrencia");
public class Ocorrencia implements Serializable {
    
    private static final long serialVersionUID = 1L;

    public static final String BUSCAR_OCORRENCIA_POR_ID_COM_MATERIAIS = "Ocorrencia.buscarOcorrenciaPorIdComMateriais";
    
    //Outros Atributos
    
    @OneToMany(mappedBy = "ocorrencia")
    private Set<MaterialApreendido> materiais;
    

    //Getters e Setters
    public Set<MaterialApreendido> getMateriais() {
        return materiais;
    }

    public void setMateriais(Set<MaterialApreendido> materiais) {
        this.materiais = materiais;
    }
}

MaterialApreendido.class

@Entity
@Table(name = "material_apreendido")
public class MaterialApreendido implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    //Outros Atributos
    
    @JoinColumn(name = "ocorrencia")
    @ManyToOne
    private Ocorrencia ocorrencia;

    //Getters e Setters
    public Ocorrencia getOcorrencia() {
        return ocorrencia;
    }

    public void setOcorrencia(Ocorrencia ocorrencia) {
        this.ocorrencia = ocorrencia;
    }
}

OcorrenciaFacade.class

public class OcorrenciaFacade implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    OcorrenciaDAO ocorrenciaDAO = new OcorrenciaDAO();
    MaterialApreendidoDAO materialDAO = new MaterialApreendidoDAO();
    

    public Ocorrencia buscarOcorrenciaComTodosMateriais(int id_ocorrencia) {
        ocorrenciaDAO.beginTransaction();
        Ocorrencia ocorrencia = ocorrenciaDAO.buscarOcorrenciaComTodosMateriais(id_ocorrencia);
        ocorrenciaDAO.closeTransaction();
        return ocorrencia;
    }
    
    public void addMaterialParaOcorrencia(int id_material, int id_ocorrencia) {
        ocorrenciaDAO.beginTransaction();
        materialDAO.joinTransaction();
        MaterialApreendido material = new MaterialApreendido();
        Ocorrencia ocorrencia = new Ocorrencia();
        material = materialDAO.buscar(id_material);
        ocorrencia = ocorrenciaDAO.buscar(id_ocorrencia);
        material.setOcorrencia(ocorrencia); // NÃO ESTÁ SETANDO
        ocorrencia.getMateriais().add(material);
        ocorrenciaDAO.commitAndCloseTransaction();
    }
    
    public void removerMaterialDaOcorrencia(int id_material, int id_ocorrencia) {
        ocorrenciaDAO.beginTransaction();
        materialDAO.joinTransaction();
        MaterialApreendido material = new MaterialApreendido();
        Ocorrencia ocorrencia = new Ocorrencia();
        material = materialDAO.buscar(id_material);
        ocorrencia = ocorrenciaDAO.buscar(id_ocorrencia);
        material.setOcorrencia(null);
        ocorrencia.getMateriais().remove(material);
        ocorrenciaDAO.commitAndCloseTransaction();
    }
    

    //Getters e Setters
    public OcorrenciaDAO getOcorrenciaDAO() {
        return ocorrenciaDAO;
    }

    public void setOcorrenciaDAO(OcorrenciaDAO ocorrenciaDAO) {
        this.ocorrenciaDAO = ocorrenciaDAO;
    }
}

OcorrenciaMB.class

@ViewScoped
@ManagedBean(name = "ocorrenciaMB")
public class OcorrenciaMB extends AbstractMB implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    private static final String OCORRENCIA_SELECIONADA = "ocorrenciaSelecionada";
    
    private Ocorrencia ocorrencia;
    private Ocorrencia ocorrenciaComMateriais;
    private MaterialApreendido material;
    
    private OcorrenciaFacade ocorrenciaFacade = new OcorrenciaFacade();
    private MaterialApreendidoFacade materialFacade = new MaterialApreendidoFacade();

    
    public void addMaterialParaOcorrencia() {
        try {
            material = new MaterialApreendido();
            material.setId_material(getMaterialFacade().buscarUltimoMaterialCadastrado()); //BUSCA O ULTIMO ID CADASTRADO (SELECT MAX(ma.id_material) FROM material_apreendido ma)
            
            getOcorrenciaFacade().addMaterialParaOcorrencia(material.getId_material(), ocorrenciaComMateriais.getId_ocorrencia());
            closeDialog();
            displayInfoMessageToUser("Adicionado Com Sucesso");
            relistarOcorrenciaComMateriais();
            resetarMaterial();            
        } catch(Exception e){
            keepDialogOpen();
            displayErrorMessageToUser("Ops, não foi possível criar. Try again later");
            e.printStackTrace();
        }
    }
    
    public void removerMaterialDaOcorrencia() {
        try {
            getOcorrenciaFacade().removerMaterialDaOcorrencia(material.getId_material(), ocorrenciaComMateriais.getId_ocorrencia());
            closeDialog();
            displayInfoMessageToUser("Deletado Com Sucesso");
            relistarOcorrenciaComMateriais();
            resetarMaterial();
        } catch(Exception e) {
            keepDialogOpen();
            displayErrorMessageToUser("Ops, não foi possível criar. Try again later");
            e.printStackTrace();
        }
    }
    
    //PEGA A OCORRÊNCIA SELECIONADA NA TABELA E MUDA PARA A PÁGINA DE ADIÇÃO DE MATERIAIS 
    public String inserirDadosOcorrencia() {
        ELFlash.getFlash().put(OCORRENCIA_SELECIONADA, ocorrencia);
        return "/pages/protected/defaultUser/Ocorrencia/inserirDadosOcorrencia/ocorrenciaMateriais?faces-redirect=true";
    }
    
    public void relistarOcorrenciaComMateriais() { 
        ocorrenciaComMateriais = new Ocorrencia();
        ocorrenciaComMateriais = getOcorrenciaFacade().buscarOcorrenciaComTodosMateriais(ocorrencia.getId_ocorrencia());
    }
    
    public void resetarMaterial() {
        material = new MaterialApreendido();
    }
    
    //Getters e Setters
    public Ocorrencia getOcorrencia() {
        if(ocorrencia == null) {
            ocorrencia = new Ocorrencia();
        }
        return ocorrencia;
    }

    public void setOcorrencia(Ocorrencia ocorrencia) {
        this.ocorrencia = ocorrencia;
    }

    public Ocorrencia getOcorrenciaComMateriais() {
        if(ocorrenciaComMateriais == null) {
            if(ocorrencia == null) {
                ocorrencia = new Ocorrencia();
                ocorrencia = (Ocorrencia) ELFlash.getFlash().get(OCORRENCIA_SELECIONADA);
            }
            ocorrenciaComMateriais = new Ocorrencia();
            ocorrenciaComMateriais = getOcorrenciaFacade().buscarOcorrenciaComTodosMateriais(ocorrencia.getId_ocorrencia());
        }
        return ocorrenciaComMateriais;
    }

    public void setOcorrenciaComMateriais(Ocorrencia ocorrenciaComMateriais) {
        this.ocorrenciaComMateriais = ocorrenciaComMateriais;
    }

    public MaterialApreendido getMaterial() {
        if(material == null) {
            material = new MaterialApreendido();
        }
        return material;
    }

    public void setMaterial(MaterialApreendido material) {
        this.material = material;
    }

    public OcorrenciaFacade getOcorrenciaFacade() {
        if(ocorrenciaFacade == null) {
            ocorrenciaFacade = new OcorrenciaFacade();
        }
        return ocorrenciaFacade;
    }

    public void setOcorrenciaFacade(OcorrenciaFacade ocorrenciaFacade) {
        this.ocorrenciaFacade = ocorrenciaFacade;
    }

    public MaterialApreendidoFacade getMaterialFacade() {
        if(materialFacade == null) {
            materialFacade = new MaterialApreendidoFacade();
        }
        return materialFacade;
    }

    public void setMaterialFacade(MaterialApreendidoFacade materialFacade) {
        this.materialFacade = materialFacade;
    }
}

ocorrenciaMateriais.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">
    
<h:body>
    <ui:composition template="/pages/protected/templates/master.xhtml">
        <ui:define name="divMain">
            <h:form id="formMateriais">
                <h1>Materiais Apreendidos</h1>
                <h3>#{bundle.ocorrenciaMateriais}: <h:outputText value="#{ocorrenciaMB.ocorrenciaComMateriais.bo_numero}" /></h3>
                <p:commandLink action="/pages/protected/defaultUser/Ocorrencia/ocorrenciasBusca?faces-redirect=true">
                    <p:graphicImage library="images" name="voltar.png" height="50px" />
                </p:commandLink>
                <hr/>
                
                <p:dataTable style="font-size: 15px;" id="tabelaMateriais" value="#{ocorrenciaMB.ocorrenciaComMateriais.materiais}" var="material" emptyMessage="#{bundle.semDados}" paginator="true" rows="10"
                    paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                    rowsPerPageTemplate="5,10,15">
                    
                    <p:column headerText="#{bundle.descricao}">
                        <h:outputText value="#{material.descricao}" />
                    </p:column>

                    <p:column headerText="#{bundle.situação}">
                        <h:outputText value="#{material.situacao}" />
                    </p:column>
                    
                    <p:column headerText="#{bundle.quantidade}" style="width: 10%;">
                        <h:outputText value="#{material.quantidade}" />
                    </p:column>
                    
                    <p:column>
                        <p:commandButton value="#{bundle.remover}" icon="ui-icon-plus" actionListener="#{ocorrenciaMB.resetarMaterial()}" onclick="PF('dialogRemoverMaterialDaOcorrencia').show();" update=":formDialogRemoverMaterialDaOcorrencia" >
                            <f:setPropertyActionListener target="#{ocorrenciaMB.material}" value="#{material}" />
                        </p:commandButton>
                        <p:spacer width="10px" />
                    </p:column>
                </p:dataTable>
                <p:commandButton value="#{bundle.add}  #{bundle.material}" icon="ui-icon-plus" onclick="PF('dialogAddMaterialOcorrencia').show();" update=":formDialogAddMaterialOcorrencia" />
            </h:form>

            <ui:include src="/pages/protected/defaultUser/Ocorrencia/inserirDadosOcorrencia/dialogs/dialogAddMaterialOcorrencia.xhtml" />
            <ui:include src="/pages/protected/defaultUser/Ocorrencia/inserirDadosOcorrencia/dialogs/dialogRemoverMaterialDaOcorrencia.xhtml" />
            
        </ui:define>
    </ui:composition>
</h:body>
</html>

dialogAddMaterialOcorrencia.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">

<h:body>
    <p:dialog widgetVar="dialogAddMaterialOcorrencia" header="Criar Nova Instrução de Serviço" id="idDialogAddMaterialOcorrencia" width="800" modal="true"
        closable="true" draggable="false" resizable="false">
        <h:form id="formDialogAddMaterialOcorrencia" prependId="false">
            
            <p:wizard showNavBar="false" widgetVar="wiz">
                
                <p:tab id="dadosM" title="Dados Material">
                <br/>
                <p:panelGrid styleClass="semBorda" columns="3">
                    
                    <h:outputLabel for="descMaterial" value="#{bundle.descricao}:" />
                    <p:inputText id="descMaterial" value="#{materialMB.materialApreendido.descricao}" required="true" label="#{bundle.descricao}" />
                    <p:message for="descMaterial"/>

                    <h:outputLabel for="situacao" value="#{bundle.situação}:" />                
                    <p:selectOneMenu id="situacao" value="#{materialMB.materialApreendido.situacao}" required="true" label="#{bundle.situação}" style="width: 150px;">                    
                        <f:selectItem itemLabel="...Selecione" itemValue="" noSelectionOption="true" />
                        <f:selectItem itemLabel="Intacto" itemValue="Intacto" />
                        <f:selectItem itemLabel="Quebrado" itemValue="Quebrado" />
                        <f:selectItem itemLabel="Arranhado" itemValue="Arranhado" />
                    </p:selectOneMenu>
                    <p:message for="situacao"/>
 
                    <h:outputLabel for="quantidade" value="#{bundle.quantidade}:" />
                    <p:inputText id="quantidade" value="#{materialMB.materialApreendido.quantidade}" required="true" label="#{bundle.quantidade}" />
                    <p:message for="quantidade"/>
                    
                    <h:outputLabel for="serie" value="#{bundle.serie}:" />
                    <p:inputText id="serie" value="#{materialMB.materialApreendido.serie_id}" required="true" label="#{bundle.serie}" />
                    <p:message for="serie"/>
                    
                    <h:outputLabel for="info" value="#{bundle.info}:" />
                    <p:inputText id="info" value="#{materialMB.materialApreendido.info}" required="true" label="#{bundle.info}" />
                    <p:message for="info"/>

                </p:panelGrid>
                    <br/>
                    <p:toolbar styleClass="barra">
                        <p:toolbarGroup>
                            <p:commandButton value="#{bundle.cancelar}" icon="ui-icon-cancel" onclick="PF('dialogAddMaterialOcorrencia').hide();"
                                             type="button" >
                                <p:ajax event="click" listener="#{materialMB.resetarMaterial()}" update=":formDialogAddMaterialOcorrencia" />
                            </p:commandButton>
                        </p:toolbarGroup>
                        
                        <p:toolbarGroup align="right">
                            <p:commandButton value="#{bundle.criar}" icon="ui-icon-plus" actionListener="#{materialMB.criarMaterial()}" -->PRIMEIRO CRIA O MATERIAL DEPOIS ADICIONA NA OCORRÊNCIA
                                             action="#{ocorrenciaMB.addMaterialParaOcorrencia()}" update=":messageGrowl :formMateriais:tabelaMateriais :formDialogAddMaterialOcorrencia"
                            oncomplete="closeDialogIfSucess(xhr, status, args, PF('dialogAddMaterialOcorrencia'), 'idDialogAddMaterialOcorrencia')" />
                        </p:toolbarGroup>
                    </p:toolbar>
                </p:tab>
                
            </p:wizard>
        </h:form>
    </p:dialog>
</h:body>
</html>

Já tentei de tudo, mas sem sucesso, somente o relacionamento unidirecional funciona, porém ele cria uma tabela de junção o que não quero. Desde já agradeço se encontrarem algum erro só falar. vlw!

De inicio, esta JoinColumn está certa?É esta a FK?

sim. o hibernate cria as tabelas e a chave estrangeira direitinho, mas na hora de setar, não faz, e a coluna fica como null.

Tenta o seguinte:

     @JoinColumn(columnName="ocorrencia", referencedColumnName="id_ocorrencia")
    @ManyToOne
    private Ocorrencia ocorrencia;

Por padrão se utiliza o nome da coluna referencia na tabela de junção, o mesmo nome da PK. Ou seja no seu caso seria ideal utilizar na @JoinColumn(name=“id_ocorrencia”) assim ele criaria a FK com este nome e conseguiria enxergar na sua entidade Ocorrencia. Testa ai e de um retorno. Uma coisa estranha é que suas entidades não tem as PK anotada na suas entidades.

Na realidade eu já tinha utilizado o referencedColumnName=“id_ocorrencia”, mas não teve efeito, troquei o @JoinColumn(name=“id_ocorrencia”) e também não obtive sucesso. A questão das PK é o seguinte, elas existem, só não adicionei ao código para não ficar muita informação, quis absorver o máximo o código para melhor entendimento.