In a long, you can store any value that fits into the long. It's easy to make a mistake and store a value that has no meaning in your application. An enum can only take valid values.
If you need to store and retrieve the data to and from an external system (for example a database), using an enum can be a little bit more work, because you need to convert the enum to and from a format that the external system understands.
I'd use an enum in this case, because of the type safety, and not because the memory footprint is better (which I doubt is true!).
I think it depends on the situation.
If you have fixed number of ids, then I would use enum for sure, because you have more options with enum. you can add methods etc.
If you can have any id (autogenerated from db) then you cannot use enum.