"легального" способа я не знаю и вряд ли он есть. смысл Jpa в том, что ты работаешь в объектной модели, а не с sql запросами. 
ты можешь присылать запрос с фронтенда в виде:
{
  "name": "some name",
  "a": {
    "id": 1
  }
}
и все будет хорошо работать
так же рекомендую сделать связь unidirectional, то есть поместить в A 
@JsonIgnore
    @OneToMany(mappedBy = "a")
    private List<BEntity> bs;
в общем зависит от целей и необходимостей.
Если ты хочешь получать именно id, то ты просто используешь инструмент не по назначению, бери myBatis и пиши sql.
А если хочешь упороться, поставь transient поле в класс BEntity и перекладывай из него в AEntity -_- :
@Entity
@Table(name = "b")
public class BEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @ManyToOne
    @JoinColumn(name = "a_id", nullable = false)
    @JsonIgnore
    private AEntity a;
    @Transient
    private Long aEntityId;
    @Column(name = "name", nullable = false)
    private String name;
}
// получаешь ответ с фронденда:
BEntity b = getBEntity();
// Создаешь AEntity
AEntity a = new AEntity();
// запихиваешь в нее нужный id из транзаент поля
a.setId(b.getAEntityId());
//засовываешь А в Б
b.setA(a);
// можно сохранять
но это вариант из разряда идиотизма
в общем спрашивай, если будут еще вопросы