When you have a large number of rules, with joins and large amounts of incremental data (all inserted at the same time), it will be much harder for you to hand code an engine that can perform as well and be maintainable - that last bit is key.
If you only have a few rules, and no joins, and you are working in a batch like mode (insert one or two objects to be processed at a time), then you may find it better to just code generate a for loop and solve the problem linearly. Although the key here comes down to maintainability.
A small note on your rules.
While we don’t recommend you insert Strings as objects, if you do need to do this you can write the rule as:
String( this != “0”)
Finally rule engines perform better with equal ==, or range <, > symbols - as these ca be indexed. Although again this only really has an impact when you have joins on large amounts of data, or there is a really large fan out on your literal constraints.