Olá, Rodrigo! Entendo que essa questão de passar entidades no construtor pode ser um pouco confusa.
No que diz respeito ao Spring e JPA, você está correto ao dizer que não é recomendado passar entidades completas no construtor de outras entidades. Isso porque, como você mencionou, pode haver casos em que uma entidade ainda não foi completamente inicializada e, portanto, passar essa entidade como um argumento para o construtor de outra entidade pode levar a uma situação em que você está trabalhando com uma entidade parcialmente inicializada, o que pode causar problemas.
No exemplo que você deu, se você estiver criando uma nova instância de uma entidade "Compra", e essa entidade "Compra" precisa de uma entidade "Produto" para ser construída, mas a entidade "Produto" ainda não existe, então você terá um problema.
Uma alternativa para isso seria usar setters para adicionar as entidades depois de terem sido completamente inicializadas. Por exemplo, em vez de passar a entidade "Produto" para o construtor da entidade "Compra", você poderia criar a entidade "Compra" primeiro e, em seguida, adicionar a entidade "Produto" à "Compra" usando um método setter depois que a entidade "Produto" tiver sido completamente inicializada.
Aqui está um exemplo de como isso poderia ser feito:
Compra compra = new Compra();
Produto produto = new Produto();
// Inicialize o produto aqui
compra.setProduto(produto);
Dessa forma, você garante que está trabalhando sempre com entidades completamente inicializadas.
Espero ter ajudado e bons estudos!