Error accessing field by reflection for persistent property

Galera estou esse seguinte erro no hibernate

Error accessing field [private java.lang.Integer br.com.moldargesso.moldar.entities.Cidade.id] by reflection for persistent property [br.com.moldargesso.moldar.entities.Cidade#id] : 1

Classe obra

@Entity
@Table (name = "obras")
public class Obra {

    
    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    @Column (name = "id")
    private Integer id;
    
    @OneToOne 
    @JoinColumn (name = "fk_cliente")
    private Cliente cliente;
    
    @OneToOne
    @JoinColumn (name = "fk_cidade")
    private Cidade cidade;

Classe CIDADE

@Entity
@Table (name = "cidade")
public class Cidade {
    
    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    @Column
    private Integer id;
    
    @Column
    private String nome;

Metodo DAO

public List<Obra> list(Integer cidade){
        
        Session session = HibernateUtil.getSessionFactory().openSession();
        Criteria criteria = session.createCriteria(Obra.class);
        
        if(cidade != null){
            
            criteria.add(Restrictions.and(
                Restrictions.eq("cidade", cidade)));
        }
        
        criteria.addOrder(Order.asc("id"));
        List<Obra> obraList = criteria.list();
        session.close();
        return obraList;
    }

Sou iniciante em java e ja estou com a cabeça doendo ja por causa desse erro.
Alguem poderia me ajudar ?
Obrigado

Você tá criando um critério que compara cidade (um objeto do tipo Cidade) com um código. Você precisa comparar o código da cidade com o código, e não o objeto inteiro. Para fazer isso, você precisa navegar pelas associações (de Obra para Cidade), e comparar de forma correta.

Documentação mostrando como fazer isso: Chapter 15: Criteria Queries - Associations.