|Most persistence architectures for Java and .NET provide interfaces to execute queries written in an architecture-specific query language.
These interfaces are string based: queries are defined in strings that are passed to the persistence engine for interpretation. String-based query interfaces have significant negative impact on programmer productivity.
The queries are not accessible to development environment features like compile-time type checking, auto-completion, and refactoring. Programmers must work in two languages: the implementation language and the query language.