If you want the dual values, setting the node limit to zero will not work. The problem you are solving is still a MIP, and CPLEX will not give dual values for a MIP (because they may not make sense).
On the other hand, if you add IloConversion instances for all the integer variables and then call solve, CPLEX will treat the problem as an LP. That means the getDuals() method will work, letting you get the dual solution.
Lazy constraints can be added either to the initial model, or to a model while it is being solved (via callbacks). I'm guessing that you mean adding them to the initial model. The AdMIPex4.java example that ships with CPLEX contains a line to add lazy constraints, but I don't know if the example is all that helpful. Basically, you add lazy constraints to a model the same way you add regular constraints, except that instead of calling addLe, addGe or addEq, you first create the constraint (using le(), ge() or eq()) and then add it using addLazyConstraint (or add a bunch at once using addLazyConstraints()). So you would use something like the following to add lazy constraints one at a time:
IloCplex model = new IloCplex();
for (int c = 0; c < numberOfConstraints; c++ {
IloRange nextConstraint = model.le(something); // or model.ge() or model.eq()
model.addLazyConstraint(nextConstraint);
}
Important note: use le(), ge() or eq(), NOT addLe(), addGe() or addEq().
#CPLEXOptimizers#DecisionOptimization